Actor のサブクラスである任意のクラスの新しいインスタンスを作成して初期化し、サブクラス型のポインターを返すことができるテンプレート化された関数を作成したいと考えています。私はまだ C++ のテンプレートのより細かい点を理解しようとしているので、完全に間違った方法でこれを行っている可能性があります。
私は自分のプロジェクトを次のように設定しています。基本クラス、Actor、サブクラス、および静的メソッド「spawn」を持つ ActorFactory です。
class Actor {
public:
Actor();
~Actor();
int attributeA;
int attributeB;
Vector3 location;
Rotator rotation;
}
class SubA : public Actor {
public:
SubA() {
attributeA = 1;
attributeB = 2;
}
~SubA();
}
class SubB : public Actor {
public:
SubB() {
attributeA = 3;
attributeB = 4;
}
~SubB();
}
class ActorFactory {
public:
ActorFactory();
~ActorFactory();
template <class T>
static T *spawn(Vector3 loc, Rotator rot) {
T *actor = new T();
actor->location = loc;
actor->rotation = rot;
return actor;
}
}
次に、コードの他の場所で、次のような簡単な呼び出しを行えるようにしたいと思います。
SubA *a = ActorFactory::spawn<SubA>(aVector, aRotator);
現在、spawn() を呼び出そうとすると、未解決の外部シンボルが表示されます。また、先に進む前に、新しいインスタンスを作成し、それが Actor の派生物であることを確認するために dynamic_cast を試行する以外に、スポーン関数の入力をより適切に制限する方法があるかどうかはわかりません。私が目指していることを達成する方法はありますか、それとも毎回アクター ポインターを返す基本的なファクトリ メソッドを実装し、そこから作業する必要がありますか?