如何使用Boost :: Signal实现类似QT的信号连接语法

时间:2010-02-17 09:46:37

标签: qt boost-signals

在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。

1 个答案:

答案 0 :(得分:4)

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

引用Wikipedia

  

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

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

编辑:我认为维基百科的报价非常明确,信号/插槽系统是使用moc实现的。我非常怀疑在没有使用类似系统的情况下有任何方法可以使用相同的语法。