4

こんにちは、インターネットと呼ばれる冥界の親愛なる人々。

テンプレートパラメータ(Y)を持つXというクラスがあるとしましょう。

template<class Y>
class X
{
    //...
};

そして、(まだ)テンプレートパラメーターなしでクラスのインスタンスを作成し、テンプレートパラメーターを使用してポインターを定義したいと思いました。

X* myClass;

//....
myClass = new X<variable>();

これはどうにか可能ですか?

4

3 に答える 3

4

X はテンプレート引数のない型ではないため、残念ながらそうではありません。ただし、使用したいインターフェイスを定義した基本クラスが X にあれば、目的を達成できます。

例えば、

struct Interface
{
    Interface() {}
    virtual ~Interface(){}

    virtual void doSomething() = 0;
};

template <class Y>
class X : public Interface
{
    //...
    virtual void doSomething() override;
};

std::unique_ptr<Interface> myClass;

//....
myClass.reset(new X<variable>());
myClass->doSomething();
于 2012-10-01T19:16:27.437 に答える
3

いいえ。ポインタは型を指し、型でXはありません。

于 2012-10-01T19:07:03.093 に答える
2

ではありませんX*。この代替案を検討してください。

class BaseX { 
    //...
};

template<class Y>
class X : public BaseX
{
    //...
};

BaseXは完全な型であるため、定義した後にBaseX*いくつかを参照することができます。X<Y>

于 2012-10-01T19:14:16.907 に答える