У меня есть следующие классы:
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 и устанавливает его в пустой указатель на карте внутри системы параметров, а затем он синхронизирует ключ карты для этого значения с идентификатором параметра, и у параметра также есть дескриптор к его родительской системе параметров, поэтому из его ID и проверки типов + typecast всегда можно получить значение параметра в системе, которое отвечает его идентификатору, но это не должно относиться к вопросу, который я думаю …)
Попробуйте добавить «typename» перед типом шаблона в списке аргументов функции:
void AddParameter(typename Parameter<TYPE, IDENTIFIER> parameter, TYPE value) {...}
Других решений пока нет …