我正在创建一个 MVC 应用程序,我希望模型能够将输出文本发送到要显示的 GUI。
一些人推荐了函数指针,但我现在了解到,如果你传递一个成员函数的函数指针,你还必须传递一个指向对象的指针(为什么不只传递对象指针以便调用方法在上面?)
无论如何,我也被推荐使用 boost::signals2。我已经实现了一个非常简单的工作示例。我基本上将信号绑定(bind)到 GUI 对象的函数。然后将指向信号的指针传递给可以触发信号的对象。请参阅下面的代码...
struct GUI
{
void talk()
{
cout << "hello" << endl;
}
};
class Person {
public:
Person(){}
Person(const signal<void ()>* sig) : sig(sig){}
virtual ~Person(){}
void testSig()
{
(*sig)();
}
private:
const signal<void ()>* sig;
};
int main() {
boost::signals2::signal<void ()> sig;
GUI gui;
sig.boost::signals2::connect(boost::bind(&GUI::talk, &gui));
Person tom(&sig);
tom.testSig();
}
由于我是信号的初学者,所以我不确定我是否按预期使用它们。
最佳答案
为什么不把 signal 放在 person 类中? 你可以这样做:
struct GUI
{
void talk() {
cout << "hello" << endl;
}
};
class Person {
boost::signals2::signal<void ()> sig_;
public:
Person() {}
virtual ~Person() {}
template <typename F>
void connect(F f) {
sig_.connect(f);
}
void testSig() {
sig_();
}
};
int main()
{
GUI gui;
Person tom;
tom.connect(boost::bind(&GUI::talk, &gui));
tom.testSig();
}
关于c++ - 这是使用 boost 信号的正确和适当的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15055313/