2

基本クラス Base と 2 つの派生クラス DerivedA、DerivedB があります。

class Base
{
};

class DerivedA: public Base 
{
   CallbackTypeA callA; // call back function pointer of type CallbackTypeA.
};

class DerivedB : public Base 
{
   CallbackTypeB callB; // call back function pointer of type CallbackTypeB.
};

どのオブジェクトがそれを呼び出すかに応じて、callA または callB の特定の条件をチェックする関数をクラス Base に実装する最も効率的な方法を誰か教えてもらえますか? 現在の制約により、仮想関数を使用したくありません

4

2 に答える 2

2

2 つの方法が考えられますが、可能であれば仮想関数を使用することをお勧めします。

A.
基本クラスの関数へのポインターを持ち、派生クラスのコンストラクターで正しい関数を指すように設定します。次に、基本クラスがそれを呼び出すことができます。しかし、これは基本的に、仮想機能メカニズムが行うことを行っています。

B.
各派生クラスの値を持つ基本クラスに列挙型があり、各派生クラスはこの列挙型を独自の値に設定します。Base クラスでは、この値を確認して適切なクラスにキャストし、適切な関数を呼び出すことができます。しかし、これは基本クラスが派生クラスについて知る必要があるため、非常に悪い習慣です。

繰り返しますが、仮想機能を使用したくないという問題が何であるかはわかりません。でも考え直したほうがいいと思います…

于 2012-11-07T10:56:12.870 に答える
1

仮想関数および/または (コードの実際の構造に応じて) を使用しますtypeid。ほとんどの場合、仮想関数は全体として最適なソリューションである可能性が高く、コードの読みやすさ、バグの発生しやすさなどがあります。

于 2012-11-07T10:47:53.183 に答える