模板化成员函数不接受任何类型的参数?

时间:2013-03-15 12:27:37

标签: c++ templates arguments template-function

我有以下课程:

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时,它都说没有函数重载匹配参数列表。我尝试了各种可能的组合。例如:

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

这不起作用,Intellisense告诉我它与参数列表不匹配,即便如此。参数列表应该是(参数,unsigned int),它就是它。我可能做错了什么?(对于那些感兴趣的人,AddParameter所做的是它接受typeValue的值并将其设置为参数系统内Map中的void指针,然后它将该值的map键与参数的ID同步,参数也是有一个句柄的父参数系统,所以从它的ID和类型检查+类型转换它总是得到系统中响应它的ID的参数值,但这不应该与我认为的问题相关...)

1 个答案:

答案 0 :(得分:-1)

尝试在函数的参数列表中的模板类型之前添加“typename”:

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