5

何らかの理由で、ローカルクラスとしていくつかの関数(メソッド)内にインターフェイスを実装することを考えています。

以下を検討してください。

class A{
public:

    virtual void MethodToOverride() = 0;

};

A * GetPtrToAImplementation(){

    class B : public A {
    public:
        B(){}
        ~B(){}

        void MethodToOverride() {
            //do something
        }
    };

    return static_cast<A *>(new B());
}


int _tmain(int argc, _TCHAR* argv[])
{

    A * aInst = GetPtrToAImplementation();

    aInst->MethodToOverride();

    delete aInst;
    return 0;
}

私がこれを行っている理由は次のとおりです。

  1. クラス(B)を別々のファイルに実装するのが面倒です
  2. MethodToOverride は呼び出しを他のクラスに委任するだけです
  3. クラス B は他のユーザーから見えないようにする必要があります
  4. 実際の実装ではスマート ポインターが使用されるため、aInst の削除について心配する必要はありません。

私の質問は、私がこれを正しく行っているかどうかです。

前もって感謝します!

4

1 に答える 1

5
  1. Bを実装する実装ファイルの名前のない名前空間で定義できますGetPtrToAImplementation()

  2. A仮想 dtor が必要です。

  3. 現在の C++ 標準では、ローカル クラスをテンプレート引数として使用することはできません。(つまり、たとえば、STL でそれらを使用することはできません。)

于 2010-03-17T14:17:49.163 に答える