好的,所以我创建了我自己的实体组件系统,并且我坚持使用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方法参数,并实现上述类似的功能?
答案 0 :(得分:5)
这是参数包最简单的用例。
template <typename T, typename ...Args>
void AddComponent(Args && ...args) {
NumOfComponents++;
AllComponents.push_back(new T(std::forward<Args>(args)...));
}
至少需要C ++ 11。