我的框架:未知子类的集合(热点)

时间:2014-07-16 13:10:38

标签: c++ templates vector collections subclass

我有这个奇怪的问题,我希望有一个类Script的子类的集合。但问题是我无法知道这个子类的类型,因为它们是由另一个人编写的(它是我框架的一种热点)。所以我使用了模板函数,但这不是我的强项,它给了我一个未解析的外部符号。 我甚至不知道如何在SO中搜索其他问题。 这是尝试将脚本子类添加到Scripts向量的代码:

template <class T>
T* GameObject::addComponent()
{
    T *t = new T(this);
    Script *s = dynamic_cast<Script*> (&t);
    if (s)
    {
        scripts.push_back(t);
        return t;
    }
    return nullptr; 
}

它被转换为脚本以防止此泛型函数捕获其他类型的对象。 它被称为:

Cube->addComponent<myScript>();

myScript是Script的子类。 如果我编写了可怕的代码,请纠正我!

1 个答案:

答案 0 :(得分:2)

如果我理解正确,MyScript

就会有类似的内容
class MyScript : public Script
{
    ...
};

然后GameObj可以收到指向Script的指针:

GameObject::addComponent(Script * s)
{
    scripts.push_back(t);
}

你可以这样称呼它:

cube->addComponent(new MyScript);