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

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 告诉我它与参数列表不匹配,即使它匹配。参数列表应该是 (Parameter, unsigned int) 就是这样。我做错了什么?(对于感兴趣的人,AddParameter 所做的是它获取 typeValue 的值并将其设置为参数系统内 Map 中的 void 指针,然后将该值的映射键与参数的 ID 同步,并且参数也有句柄到它的父参数系统,所以从它的 ID 和类型检查 + 类型转换它总是可以在系统中获取响应它的 ID 的参数值,但这不应该与我认为的问题相关......)

4

1 回答 1

-1

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

void AddParameter(typename Parameter<TYPE, IDENTIFIER> parameter, TYPE value) {...}
于 2013-03-15T12:41:04.580 回答