2012-05-12 38 views
1

我一直在与QT合作,我注意到他们通过实现类的一些新功能(如private slots: public slots: signals:等等)将OOP带到另一个级别......他们在做什么来声明这样的类的分类?它是编译器特有的还是仅仅是一种typedef?我猜测它可以移植到主流操作系统,因为QT可以在多个系统上运行。我出于好奇而问,并创建自己的子类来帮助组织和创建更多的OOP程序。例如在C++中创建更多的OOP类

class Main 
{ 
handles: 
    HANDLE hWin; 
threads: 
    HANDLE hThread; 
}; 

,然后清除继承会被简单地做

class Dialog : handles Main 
{ 

}; 
+1

这是一个设计模式,请参见[here](http://qt-project.org/doc/qt-4.8/signalsandslots.html)。 –

回答

3

对我来说,看起来人们并没有回答你的问题,他们回答了一些与众不同的问题。你似乎在谈论恰好用于插槽的“章节标签”,并且希望自己的类节的章节标签像手柄和线程一样。这是QT在将代码发送给编译器之前对其进行预处理的功能。如果不添加另一个编辑阶段,这不是你自己可以做的事情。

也就是说,除了告诉QT预编译器找到它的插槽部分外,它确实没什么用处,你不能继承它们,就像你想要做的那样。它只是标记生成内省代码的区域。

而且你真的不想这样做。如果你有独立的组件,你可以将它们分成不同的类,然后让那些控制它们交互的大型类的成员分开。如果您尝试拆分具有不同部分的类,编译器将无法确保它们不以其他方式进行交互,因为编译器不会将这些类型的限制使用不同的成员。

0

Qt meta-object compiler moc实现的。它被称为signals and slots容易。 moc也为预处理类增加了一个内省系统。还有一些信号/插槽实现不需要特殊的预处理步骤,例如Boost.SignalsBoost.Signals2。我不会考虑信号和插槽或多或少的OOP,而不是通过函数调用传递的正常消息,但这是有争议的,并不真正相关。

+0

所以有可能实现它而不用编译器特定(Boost.signals)来做到这一点,但我应该从哪里开始?我应该去通过Boost.Signals来源找到他们的实施基础我的? – user99545

+0

@ user99545首先,您应该了解您的新关键字实际上会做什么,这是标准功能无法实现的。我真的没有看到'thread'块带来的好处。另外,有很多关键字是可怕的。 – pmr