1

私はQTと協力してきましたが、クラスなどのクラスにいくつかの新機能を実装することで、OOPを別のレベルに引き上げていることに気付きましたprivate slots: public slots: signals:...クラスのそのようなカテゴリを宣言するために彼らは何をしていますか?それはコンパイラ固有ですか、それとも単に一種の種類typedefですか?QTはいくつかのシステムで実行されるので、主要なOSに移植できると思います。私は好奇心から、より多くのOOPプログラムを編成および作成するのに役立つ独自のサブクラスを作成するように依頼します。例えば

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

そして、クリーンな継承は、単に行うだけで簡単になります

class Dialog : handles Main
{

};
4

2 に答える 2

3

私には、人々はあなたの質問に答えているのではなく、少し違う答えをしているように見えます。たまたまスロットに使用される「セクションタグ」について話しているようで、ハンドルやスレッドなどの独自のクラスセクションのセクションタグが必要です。これは、コンパイラに送信される前にコードを前処理することによって、QT が行うことです。別のコンパイル段階を追加せずに自分でできることではありません。

とは言っても、QT プリコンパイラにスロットを見つけるセクションを伝えることを除いて、実際にはあまり用途がありません。あなたがしたいように見えるように、それらを継承することはできません。イントロスペクティブ コードを生成する領域をマークするだけです。

とにかく、あなたは本当にそのようにしたくないでしょう。継承したい個別のコンポーネントがある場合は、それらを個別のクラスに分割し、それらの個別のクラスを、相互作用を制御するより大きなクラスのメンバーにします。異なるセクションを持つクラスを分割しようとした場合、コンパイラーが他の部分の不変条件を必要とする何らかの方法でそれらが相互作用しないことを保証する方法はありません。異なるメンバーの使用を制限します。

于 2012-05-12T00:41:48.100 に答える
0

これはシグナルと呼ばれ、スロットはQtメタオブジェクトコンパイラmocによって実装されます。またmoc、前処理されたクラスにイントロスペクションシステムを追加します。Boost.SignalsBoost.Signals2などの特別な前処理ステップを必要としない信号/スロットの実装もあります。シグナルとスロットは、関数呼び出しを通過する通常のメッセージよりも多かれ少なかれOOPとは見なされませんが、それは議論の余地があり、実際には関係ありません。

于 2012-05-12T00:13:45.533 に答える