1

我想创建一个模板函数,该函数可以创建和初始化作为 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 指针,然后从那里开始工作?

4

0 回答 0