C++:呼叫B类的功能时,一类的一个函数被调用(指针A类B类的成员)

问题描述:

class A { 
    void functionA(); 
}; 

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

如何可以自动调用functionB()class B例如,如果functionA()被称为外class B实例? (指向Class A实例的指针是class B实例的成员)。 我正在寻找类似Qt中的SIGNAL/SLOT方法。C++:呼叫B类的功能时,一类的一个函数被调用(指针A类B类的成员)

+0

哪个实例应该在'functionA'中执行'functionB'?这是[XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)? – Rakete1111

+2

Lookup _Observer Pattern_,回调函数,回调接口。 – user0042

+0

我有一个类(A类),它代表了应该由另一个类(B类)可视化的东西的描述。 我想将Class A传递给Class B.但是如果描述(类A中的某些内容)被某个函数改变,我想要在Class B中自动触发相应的可视化函数。 – Thomas

一种选择是使用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 

正如你可以在输出中看到,当a.functionA()被调用主,functionB也被自动调用。