Arduino C++类方法回调

qgelzfjb  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(134)

我是Arduino和C的新手,我有一个关于Arduino(c),class和class方法中的“this”的问题:
我创建了classname.cpp和classname. h在classname.cpp中,我尝试以某种方式获取“this”(ClassName示例)(下面的示例):

ClassName::ClassName(){}

...
void SomeCallback(char* name, uint8_t age){
    // how to get "this" object (ClassName)?
}
...
void ClassName::Init(){
    this->someobj->setCallback(someCallback); // callback signature <void(char*, uint8_t)>
}

字符串
在这个解决方案中,我没有编译器错误,但我不能在某些回调中得到“that”
问题是:如何修改Init方法或someCallback函数以在SomeCallback中获取“this”?
我试着像这样把一些回调放到类中:
ClassName::SomeCallback(char* name,uint8_t age)

vnjpjtjt

vnjpjtjt1#

void SomeCallback(char* name, uint8_t age){
    // how to get "this" object (ClassName)?
}

字符串
因为这个函数不是类的成员,所以没有this可以引用。如果你的代码中有三个ClassName示例,那么它应该引用哪个this
类成员使用这个来引用它们所属的任何类示例。当您创建示例并使用它们时:

ClassName instance1
ClassName instance2

void setup() {

   instance1.Init();
   instance2.Init();
}


对于第一次调用Initthis指向示例1。对于第二次调用Initthis指向示例2。
但是在你的回调方法中,它不是类的成员,所以它不会被类示例调用,所以它没有this
如何解决这个问题取决于你想让程序做什么。如果你只有一个类的示例,那么就把它做成一个单例。或者甚至不要把它做成一个类。如果你有多个示例,那么一个选择是有一个指向示例的指针的静态列表,让示例通过把自己添加到列表中来“注册”自己的回调。

相关问题