我有许多
示例代码如下:
所以我的上面的示例在第17行失败,出现错误:
有没有可能以某种方式将实例的本地
我在其他帖子中读到,除非
有可能让这个工作像我所想的那样吗?如果不能,最常见的解决方案是什么(这似乎是很多人都会遇到的问题)?
X
类的实例,每个实例都包含另一个CB
类(有时不止一个CB
)。CB
类中有一个函数指针,该指针将在某些事件(单击、定时器等)之后被调用。
如果我可以将实例成员函数传递给本地CB
类实例(在这种情况下传递say()
函数),那就太有用了,这样一旦CB
触发函数,它就只会修改自己的实例。示例代码如下:
#include <iostream>
class CB {
void (*function)(void);
void init(void (*function)(void)) {
this->function = function;
}
};
class X {
private:
CB cb;
public:
void init() {
cb.init( &(this->say) ); //<- Here's the problem
}
void say() {
std::cout << "Hello World!" << std::endl;
}
};
int main() {
X x;
x.init();
}
所以我的上面的示例在第17行失败,出现错误:
no known conversion for argument 1 from ‘void (X::*)()’ to ‘void (*)()’
有没有可能以某种方式将实例的本地
say()
函数传递给实例的CB
?CB
函数无法修改,不幸的是它将被其他类型的类使用。我在其他帖子中读到,除非
say()
函数是static
或存在于类外部(这意味着它将无法访问实例变量),否则这很可能是不可能的。有可能让这个工作像我所想的那样吗?如果不能,最常见的解决方案是什么(这似乎是很多人都会遇到的问题)?
CB
调用试图修改X
状态的方法时,你的X
实例仍然存在。 - Cory Kramervoid init(void (CB::*function)(void))
- Captain Obvlious