如何使用 Boost::Signal 实现类似 QT 的信号连接语法
在 QT 中,我们可以使用以下简单语法连接信号和槽:
connect(pObject1, signal1, pObject2, slot2)
例如,可以编写如下内容:
A a;
B b;
connect(&a, SIGNAL(valueChanged(int)), &a, SLOT(setValue(int)));
对于 Boost::Signal,我们可以这样编写语法:
A a;
B b;
a.valueChanged.connect(boost::bind(&B::SetValue, &b, _1))
恕我直言,boost 信号的语法更复杂。有没有办法让 Boost::Signal 的语法更像 QT。
In QT we can connect signals and slots using the following simple syntax:
connect(pObject1, signal1, pObject2, slot2)
For instance, one can write something like:
A a;
B b;
connect(&a, SIGNAL(valueChanged(int)), &a, SLOT(setValue(int)));
With Boost::Signal the syntax we would write it this way:
A a;
B b;
a.valueChanged.connect(boost::bind(&B::SetValue, &b, _1))
IMHO, the boost signal's syntax is more complicated. Is there a way to make the Boost::Signal's syntax more QT like.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Qt 的问题是它在编译期间会经历代码生成阶段,而 Boost 无法做到这一点。这意味着 Qt 可以做一些非常聪明的语法事情,如果不经过类似的过程就无法复制这些事情。
引用维基百科:
(我无法获取链接,但它是
http://en.wikipedia.org/wiki/Qt_(framework)
)编辑:我认为维基百科quote 很清楚,信号/槽系统是使用 moc 实现的。我非常怀疑是否有任何方法可以在不使用类似系统的情况下使用相同的语法。
The thing with Qt is that it goes through a code generation phase during compilation, that Boost can't do. That means that Qt can do some very clever syntactic things that can't be copied without going through a similar process.
To quote Wikipedia:
(I can't get the link to work, but it's
http://en.wikipedia.org/wiki/Qt_(framework)
)Edit: I think the Wikipedia quote is quite clear that the signal/slot system is implemented using the moc. I doubt very much that there's any way to use the same syntax without using a similar system.