实例化对象时的 C++ 纯虚函数实现
C++ pure virtual function implementation upon instantiating object
我不确定这个问题是否已经在某个地方得到了回答,或者我的要求是否可行。一般来说,我不太熟悉 C++ 和 OOP,所以如果我问的问题太明显了,请原谅我,因为我现在有点卡住了。
不管怎样,我要处理的是:
我正在使用一个框架来处理来自应用程序的一些回调。 API 有一个 class 用于这些事件和作为纯虚函数的回调函数。例如:
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 对象时看到 "I'm a ClassB object" 消息,我可以在触发事件时看到 "Hello callback" 消息。
那么我在这里要问的是如何在我的回调中获取来自 main 的 "x" 的值?我能以某种方式在 main 中重新实现回调吗?您认为我的做法是否正确?
我想要的是通过具有 class B 的对象在我的 main 中实现纯虚拟回调函数。或者甚至以某种方式在 myCallback 函数中获取 x 的值。
我不确定我是否足够清楚或者我是否搞砸了任何东西
如果我理解这个问题,你想要的通常称为闭包。您希望 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;
}
我不确定这个问题是否已经在某个地方得到了回答,或者我的要求是否可行。一般来说,我不太熟悉 C++ 和 OOP,所以如果我问的问题太明显了,请原谅我,因为我现在有点卡住了。 不管怎样,我要处理的是:
我正在使用一个框架来处理来自应用程序的一些回调。 API 有一个 class 用于这些事件和作为纯虚函数的回调函数。例如:
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 对象时看到 "I'm a ClassB object" 消息,我可以在触发事件时看到 "Hello callback" 消息。 那么我在这里要问的是如何在我的回调中获取来自 main 的 "x" 的值?我能以某种方式在 main 中重新实现回调吗?您认为我的做法是否正确? 我想要的是通过具有 class B 的对象在我的 main 中实现纯虚拟回调函数。或者甚至以某种方式在 myCallback 函数中获取 x 的值。 我不确定我是否足够清楚或者我是否搞砸了任何东西
如果我理解这个问题,你想要的通常称为闭包。您希望 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;
}