2013-03-15 129 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

相关问题