C ++:当调用A类函数时调用B类函数(指向A类的指针是B类成员)

时间:2017-08-17 17:03:52

标签: c++ qt qt-signals slot

class A {
  void functionA();
};

class B {
  A* A_;
  void functionB();
};

如果在functionB()实例之外调用class B,如何在functionA()实例中自动调用class B? (指向Class A实例的指针是class B实例的成员)。 我正在寻找Qt中的SIGNAL / SLOT方法。

1 个答案:

答案 0 :(得分:1)

一种选择是使用function object作为回调。在下面的示例中,B的构造函数在A实例中注册lambda function,只要调用functionA,A就会调用该实例。反过来,这个lambda只调用functionB。

#include <functional>
#include <iostream>

class A {
public:
    void functionA() {
        std::cout << "Function A called" << std::endl;
        if (callback_) {
            callback_();
        }
    }

    void setCallback(std::function<void(void)> callback) {
        this->callback_ = callback;
    }

private:
    std::function<void(void)> callback_;
};

class B {
public:
    B(A* a) : A_(a) {
        A_->setCallback([this](){this->functionB();});
    }

    void functionB() {
        std::cout << "Function B called" << std::endl;
    }

private:
    A* A_;
};

int main() {
    A a;
    B b = B(&a);

    a.functionA();
}

输出:

Function A called
Function B called

正如您在输出中看到的那样,当在main中调用a.functionA()时,也会自动调用functionB。