2010-02-17 46 views
4

在QT,我们可以连接使用下列简单的语法信号和槽:与升压信号连接如何实现QT的语法::信号

connect(pObject1, signal1, pObject2, slot2) 

举例来说,一个可以写类似:

A a; 
B b;  
a.valueChanged.connect(boost::bind(&B::SetValue, &b, _1)) 

恕我直言,升高信号的:

A a; 
B b;  
connect(&a, SIGNAL(valueChanged(int)), &a, SLOT(setValue(int))); 

随着升压::信号的语法,我们会这样写语法更复杂。有没有办法让Boost :: Signal的语法更像QT。

+0

说明:QT的人是否使用MOC来支持这种语法?它可以在没有MOC的情况下实施吗? – Lev 2010-02-17 09:54:08

回答

4

Qt的事情是它在编译过程中经历了一个代码生成阶段,Boost不能这样做。这意味着Qt可以做一些非常聪明的语法事物,如果不经过类似的过程就无法复制。

引述Wikipedia

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

(我不能得到的链接工作,但它的http://en.wikipedia.org/wiki/Qt_(framework)

编辑:我认为维基百科的报价是非常清楚的信号/槽系统正在使用的MOC实现。我非常怀疑有什么方法可以在不使用类似系统的情况下使用相同的语法。