我想创建一个模板函数,该函数可以创建和初始化作为 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() 时得到一个未解析的外部符号。另外,我不确定是否有办法更好地限制 spawn 函数的输入,而不是创建新实例,然后尝试进行 dynamic_cast 以确保它是 Actor 的派生,然后再继续。有什么方法可以完成我的目标,还是我应该只实现一个基本的工厂方法,每次都返回一个 Actor 指针,然后从那里开始工作?