мне нужна шаблон-оф-шаблона класс, но проблема в том, что я не могу получить доступ к типу вложенного шаблона:Обращения к вложенному параметру шаблона
template<template<class TParamPayload> class TMsg>
class ParameterBasedFilter : public IMsgFilter
{
public:
typedef TMsg<TParamPayload> ExpectedMessage;
typedef TParamPayload::otherType SomeOtherType;
};
А вот использование (я хочу передать только один аргумент шаблона, без запятой)
ParameterBasedFilter<SomeMessage<SomePayload>> filter;
Существует ошибка в ParameterBasedFilter:
error: 'TParamPayload' was not declared in this scope
typedef TMsg<TParamPayload> ExpectedMessage;
^
Возможно ли вообще получить тип вложенного шаблона? Я знаю, что ниже код будет работать
template<class TParamPayload, template<class> class TMsg>
class ParameterBasedFilter : public IMsgFilter
{
public:
typedef TMsg<TParamPayload> ExpectedMessage;
typedef TParamPayload::otherType SomeOtherType;
};
, но тогда я должен пройти 2-х типов для аргументов шаблона:
ParameterBasedFilter<SomePayload, SomeMessage<SomePayload>> filter;
и это выглядит странно, потому что SomePayload используется дважды.
Возможный дубликат [Где и почему я должен поставить «шаблон» и «TYPENAME» ключевые слова? ] (http://stackoverflow.com/questions/610245/where-and-why-do-i-have-to-put-the-template-and-typename-keywords) –
Я не думаю, что это дубликат (по крайней мере, не упомянутого вопроса). ОП спрашивает, почему он не может ссылаться на (названные) параметры шаблона параметра шаблона шаблона, т. Е. 'TParamPayload' (jeez .. кто-нибудь это понял?). – JorenHeit