我不确定这是否已在某处得到解答,或者我所问的是否可行。我一般不太熟悉C ++和OOP,所以请原谅我,如果我问的话太明显了,因为我的思想现在有点卡住了。 无论如何,我想要处理的是:
我正在使用一个框架来处理来自应用程序的一些回调。 API具有这些事件的类和回调函数作为纯虚函数。例如:
class A {
public:
A(){};
~A(){};
virtual void myCallback(){} = 0
};
在我的代码中我实现了这个回调,我有类似的东西:
class B : A {
public:
B(){
std::cout<<"I'm a ClassB object";
};
~B(){};
void myCallback(){
std::cout<<"Hello callback";
};
};
现在我主要想的是我有类似的东西:
int main(){
int x=1;
B objB;
//Do some stuff for a while
return 1;
}
我可以看到实例化B对象&#34;我是一个ClassB对象&#34;消息,我可以看到触发事件&#34;你好回调&#34;信息。 所以我在这里问的是我如何能够在回调中获得&#34; x&#34;来自主?我可以以某种方式重新实现主要内部的回调吗?你认为我的方法是正确的吗? 我想要的是通过拥有类B的对象在我的main中实现纯虚拟回调函数。甚至以某种方式在myCallback函数中获取x的值。 我不确定我是否足够清楚,或者我是否搞砸了什么
答案 0 :(得分:0)
如果我理解了这个问题,你想要的通常称为闭包。您希望myCallback
知道main中x的值。有几种方法可以做到这一点,最简单的方法如下:
class B : public A {
public:
B(int x) x(x) {
std::cout<<"I'm a ClassB object";
}
~B() = default;
void myCallback() {
std::cout << "Hello callback, x is " << x << "\n";
}
private:
int x;
};
int main() {
int x = 1;
B objB(x);
//Do some stuff for a while
return 0;
}