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类的成员)
答
一种选择是使用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也被自动调用。
哪个实例应该在'functionA'中执行'functionB'?这是[XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)? – Rakete1111
Lookup _Observer Pattern_,回调函数,回调接口。 – user0042
我有一个类(A类),它代表了应该由另一个类(B类)可视化的东西的描述。 我想将Class A传递给Class B.但是如果描述(类A中的某些内容)被某个函数改变,我想要在Class B中自动触发相应的可视化函数。 – Thomas