我想创建一个模板化函数,它可以创建和初始化作为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指针的基本工厂方法,并从那里开始工作?