2016-11-14 181 views
1

好吧,我創建了我自己的實體組件系統,並將其鎖定在AddComponent實體方法中,添加組件到Enity,這裏是它的外觀:將類作爲模板參數,並將類構造函數的參數作爲方法參數的方法

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

這工作正常,但如果我有一個組件構造?像這樣

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 

如何接受變換的方法參數AddComponent方法參數,實現類似的東西上面?

回答

5

這是參數包最簡單的用例。

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

需要至少C++ 11。

+0

你好代碼你告訴我是給我兩個錯誤的是「無效AddComponent(參數&& ..args){」錯誤行24 \t C3484 \t語法錯誤:預期「 - >」的返回類型之前 錯誤\t C3613 \t' - >'(假設爲'int')後缺少返回類型24 – kooldart

+0

小寫字母錯誤。一段時間不見了。 –

+0

不要固定它,用3個虛線參數替換「..args」:「......參數」 – kooldart