Можно ли использовать шаблон variadic для перехвата всех случаев передачи параметра шаблона, который сам является шаблоном?
Я использовал шаблонизацию для получения отладочного вывода для некоторых методов на основе шаблона.Сначала я создал универсальный обработчик, затем специализировал его для собственных типов:
template<typename... PARAMS> struct TypeList{};
template<typename TYPE> inline void ntype(ostream &out, TypeList<TYPE>) {
out << typeid(TYPE).name();
}
template<> inline void ntype(ostream &out, TypeList<int>) {
out << "int";
}
...
Затем я попытался добавить второй формат шаблона для перехвата передаваемых типов:
template<typename ... SUB, template<typename...> class TYPE> void ntype(ostream &out, TypeList<TYPE<SUB...> >) {
ntype(out, TypeList<typename TYPE>());
out << '<';
subtype(out, TypeList<SUB...>());
out << '>';
}
Гдеподтип - это шаблонный метод, разработанный для рекурсии по списку параметров, по очереди применяя каждый к ntype ().
Проблема в том, что я пытаюсь вызвать это с чем-то с эффектом:
ntype<SomeClass<int> >(out, TypeList<SomeClass<int> >());
Это только когда-либо соответствует общей первой функции шаблона - никаких ошибок компиляции, но это никогда не соответствует версии шаблона шаблона.Я уверен, что это просто недостаток понимания с моей стороны, но результаты Google кажутся очень слабыми, когда дело доходит до четких примеров шаблонов шаблонов, и даже более тонкими в отношении переменных параметров шаблона.
МожетКто-нибудь объяснит, возможно ли то, что я пытаюсь сделать, и если да, то, что я делаю неправильно?