我一直在使用QT,我注意到他们通过在诸如private slots: public slots: signals:
之类的类中实现一些新功能来将OOP提升到另一个级别......他们正在做什么来声明这样的类的类别?它是编译器特定的还是只是一种typedef
?我猜它可以移植到主要操作系统,因为QT将在几个系统上运行。我出于好奇并创建自己的子类来帮助组织和创建更多的OOP程序。例如
class Main
{
handles:
HANDLE hWin;
threads:
HANDLE hThread;
};
然后只需执行
即可轻松完成继承class Dialog : handles Main
{
};
答案 0 :(得分:3)
对我来说,看起来人们没有回答你的问题,他们正在回答一些不同的事情。你似乎在谈论恰好用于插槽的“section标签”,并希望你自己的类部分的section标签,如句柄和线程。这是QT通过在将代码发送到编译器之前预处理来完成的。如果不添加另一个编译阶段,这不是你自己可以做的事情。
尽管如此,它确实没什么用处,除了告诉QT预编译器找到它的插槽部分。你不能继承它们,就像你想要做的那样。它只标记了一个生成内省代码的区域。
你真的不想这样做。如果您有自己想要的单独组件,请将它们分成不同的类,然后将这些单独的类成为控制其交互的较大类的成员。如果你试图拆分一个具有不同部分的类,编译器将无法确保它们不以某种方式进行交互,这需要其他部分的不变量,因为编译器不会放置那些类型的使用不同成员的界限。
答案 1 :(得分:0)
它被称为signals and slots由Qt meta-object compiler moc实现。 moc
还为预处理类添加了内省系统。还存在信号/插槽实现,不需要特殊的预处理步骤,例如Boost.Signals和Boost.Signals2。我不会比通过函数调用的正常消息更多或更少地考虑信号和插槽OOP,但这是有争议的并且不是真正相关的。