4

在 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::Signal 的语法更像 QT。

4

1 回答 1

4

Qt 的问题在于它在编译期间经历了代码生成阶段,而 Boost 无法做到这一点。这意味着 Qt 可以做一些非常聪明的语法事情,这些事情如果不经过类似的过程就无法复制。

引用维基百科

被称为 moc,这是一个在 Qt 程序的源代码上运行的工具。它将 C++ 代码中的某些宏解释为注释,并使用它们生成附加的 C++ 代码,其中包含有关程序中使用的类的“元信息”。Qt 使用此元信息来提供 C++ 中不具备的编程特性:信号/槽系统、自省和异步函数调用。

(我无法获得工作链接,但它是http://en.wikipedia.org/wiki/Qt_(framework)

编辑:我认为维基百科的引用很清楚,信号/槽系统是使用 moc 实现的。我非常怀疑是否有任何方法可以在不使用类似系统的情况下使用相同的语法。

于 2010-02-17T09:50:15.007 回答