实例化对象时的C ++纯虚函数实现

时间:2015-10-30 16:33:09

标签: c++ oop callback event-handling

我不确定这是否已在某处得到解答,或者我所问的是否可行。我一般不太熟悉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的值。 我不确定我是否足够清楚,或者我是否搞砸了什么

1 个答案:

答案 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;
}