将类作为模板参数的方法,并将类构造函数的参数作为方法参数

时间:2016-11-14 16:26:33

标签: c++ templates entity

好的,所以我创建了我自己的实体组件系统,并且我坚持使用AddComponent Entity方法,该方法将组件添加到Enity中,以下是它的外观:

template <typename T>
void AddComponent() {
    NumOfComponents++;
    AllComponents.push_back(new T());
}

这很好用,但是如果我有一个Component构造函数呢?像这样

class Transform : public Component
{
public:
    Transfrm(Vector3f newPosition, Vector3f newRotation, Vector3f newScale) : Component("Transfrm") {};

    Vector3f Position;
    Vector3f Rotation;
    Vector3f Scale;
    ~Transfrm();
};

我想要达到的目标是:

Entity ent1;
Vector3f Pos, Rot, Scl;
ent1.AddComponent<Transform>(Pos, Rot, Scl); // This is currently not possible

如何接受Transform的方法参数作为AddComponent方法参数,并实现上述类似的功能?

1 个答案:

答案 0 :(得分:5)

这是参数包最简单的用例。

template <typename T, typename ...Args>
void AddComponent(Args && ...args) {
    NumOfComponents++;
    AllComponents.push_back(new T(std::forward<Args>(args)...));
}

至少需要C ++ 11。