2013-03-15 162 views
0

我有以下類別:模板成員函數不接受任何類型的參數?

template<class TYPE, class IDENTIFIER> 
class Parameter 
{ 
    TYPE typeValue; 
    IDENTIFIER ID; 
}; 

template<class IDENTIFIER> 
class ParameterSystem 
{ 
    template<typename TYPE> 
    void AddParameter(Parameter<TYPE, IDENTIFIER> parameter, TYPE value); 
}; 

但是,每當我嘗試使用AddParameter,它說沒有函數重載匹配的參數list.I試過各種可能的combinations.For實例:

typedef unsigned int    ResourceIndex; //I use unsigned ints to reference resources in my other(resource system) 
typedef unsigned int    DefaultParameterID; 
typedef Parameter<ResourceIndex, DefaultParameterID>  ResourceParameter; 

所以後來我用這樣的:

ParameterSystem<DefaultParameterID> parameterSystem; 
ResourceParameter param; 
//do some stuff with param; 
parameterSystem.AddParameter<ResourceIndex>(param, param.typeValue); //here it gives the error 

這不起作用,智能感知告訴我,它不匹配參數列表,甚至壽它的參數列表應該是(Parameter,unsigned int),這就是它的原因。我可以做什麼錯誤?(對於那些有興趣的人,AddParameter做的是取得typeValue的值並將其設置爲一個void指針一個Map在參數系統內部,然後它將該值的映射關鍵字與參數的ID同步,並且該參數也具有對它的父參數系統的句柄,所以從它的ID和一個類型檢查+類型轉換可以始終得到參數在迴應它的ID,但是這不應該是相關的,我認爲這個問題的系統值...)

+1

這是你的真實密碼?該函數被稱爲'AddParameter',你正在調用'Add'。另外,Intellisense不是編譯器。 *編譯器*對此有何評論? – 2013-03-15 12:30:12

+0

噢,我編輯它,對此感到遺憾。 – 2013-03-15 12:33:25

+1

void AddParameter中的IDENTIFIER的位置(參數 ... ...? – iammilind 2013-03-15 12:35:12

回答

-1

嘗試在函數的參數列表中的模板類型之前加入「類型名」:

void AddParameter(typename Parameter<TYPE, IDENTIFIER> parameter, TYPE value) {...} 
+0

嵌套名稱需要'typename',這裏不適用。 – Xeo 2013-03-15 12:43:06

相關問題