2

私は個人的なプロジェクトでフレームワークのさまざまなコンポーネントのインターフェイスを設定していますが、インターフェイスで役立つと思われるものを突然考えました。私の質問は、これが可能かどうかです:

class a
{
public:
    virtual class test = 0;

};

class b : public a
{
public:
    class test
    {
        public:
           int imember;
    };
};

class c : public a
{
public:
    class test
    {
    public:
           char cmember;  // just a different version of the class. within this class
    };
};

次のようなことができるように、派生オブジェクト内で定義する必要がある仮想クラスまたは純粋仮想クラスを宣言するようなものです。

int main()
{
    a * meh = new b();
    a * teh = new c();

    /* these would be two different objects, but have the same name, and still be able  
 to be referred to by an interface pointer in the same way.*/
    meh::test object1;    
    teh::test object2;

    delete meh;
    delete teh;

    return 0;
}

msvc++ が一連の構文エラーをスローするので、これを行う方法はありますか?正しく書いていないだけですか?

4

2 に答える 2

6

いいえ、有効ではありません。いずれにせよ、C++ には仮想クラス自体の概念はありません。純粋な仮想メソッドのみを使用して特定のクラスへのポインターを保持することで、おそらく目的を達成できます (ただし、これは必須ではありません)。

class ITest { /* full of pure virtual methods... maybe. */};

class a
{
public:
    virtual ITest* someFunctionName()=0 ;
private:
    ITest* test_;
};

次に、a から継承することを決定して、各実装に の具体的な実装を与えるITestか、またはコンストラクターのパラメーターに基づいて使用する実装を決定するなど、他のアプローチを行うことができます。

于 2012-04-20T06:12:39.313 に答える