所以我开始学习Qt 4.5并发现Signal/Slot机制有所帮助.但是,现在我发现自己正在考虑两种类型的架构.
这是我会用的
class IDataBlock
{
public:
virtual void updateBlock(std::string& someData) = 0;
}
class Updater
{
private:
void updateData(IDataBlock &someblock)
{
....
someblock.updateBlock(data);
....
}
}
Run Code Online (Sandbox Code Playgroud)
注意:代码内联为简洁起见.
现在我可以发出信号
void Updater::updateData()
{
...
emit updatedData(data);
}
Run Code Online (Sandbox Code Playgroud)
这是更清洁,减少了界面的需要,但我应该这样做只是因为我可以吗?第一个代码块需要更多的输入和更多的类,但它显示了一种关系.使用第二块代码,一切都更"无形".哪一个更可取,如果是个案基础,那么指导方针是什么?
Eug*_*ene 10
发送信号需要花费很少的开关和一些额外的函数调用(取决于连接的内容和方式),但开销应该是最小的.
信号的提供者无法控制其客户端是谁,即使他们都在发出返回时实际获得了信号.
这非常方便并且允许完全解耦,但是当执行顺序很重要或者想要返回某些内容时也会导致问题.
永远不要传递指向临时数据的指针(除非你确切地知道你在做什么,即便如此......).如果必须,传递成员变量的地址 - Qt提供了一种延迟销毁对象的方法,直到处理完所有事件后.
信号也可能要求事件循环运行(除非我认为连接是直接的).
总的来说,它们在事件驱动的应用程序中很有意义(实际上,如果没有它们,很快就会变得很烦人).
如果您已在项目中使用Qt,请务必使用它们.如果对Qt的依赖是不可接受的,那么boost也有类似的机制.
| 归档时间: |
|
| 查看次数: |
4611 次 |
| 最近记录: |