こんにちは、インターネットと呼ばれる冥界の親愛なる人々。
テンプレートパラメータ(Y)を持つXというクラスがあるとしましょう。
template<class Y>
class X
{
//...
};
そして、(まだ)テンプレートパラメーターなしでクラスのインスタンスを作成し、テンプレートパラメーターを使用してポインターを定義したいと思いました。
X* myClass;
//....
myClass = new X<variable>();
これはどうにか可能ですか?
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();
いいえ。ポインタは型を指し、型でXはありません。
ではありませんX*。この代替案を検討してください。
class BaseX {
//...
};
template<class Y>
class X : public BaseX
{
//...
};
BaseXは完全な型であるため、定義した後にBaseX*いくつかを参照することができます。X<Y>