我是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)
1条答案
按热度按时间vnjpjtjt1#
字符串
因为这个函数不是类的成员,所以没有
this
可以引用。如果你的代码中有三个ClassName示例,那么它应该引用哪个this
?类成员使用这个来引用它们所属的任何类示例。当您创建示例并使用它们时:
型
对于第一次调用
Init
,this
指向示例1。对于第二次调用Init
,this
指向示例2。但是在你的回调方法中,它不是类的成员,所以它不会被类示例调用,所以它没有
this
。如何解决这个问题取决于你想让程序做什么。如果你只有一个类的示例,那么就把它做成一个单例。或者甚至不要把它做成一个类。如果你有多个示例,那么一个选择是有一个指向示例的指针的静态列表,让示例通过把自己添加到列表中来“注册”自己的回调。