实例化对象时的 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;
}