一種選擇是使用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