Шаблон шаблонов вариадики в C ++
-
27-10-2019 - |
Вопрос
Можно ли использовать шаблон шаблона, чтобы использовать все случаи параметра шаблона, который сам по себе является шаблоном?
Я использую шаблон для получения вывода отладки для некоторых методов на основе шаблонов. Сначала я создал общего обработчика, а затем специализировал его для нативных типов:
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 кажутся очень тонкими на местах, когда речь идет о четких примерах шаблонов шаблонов и даже тоньше с точки зрения переменных шаблонов.
Может ли кто -нибудь объяснить, возможно ли то, что я пытаюсь сделать, и, если да, то, что я делаю не так?
Решение
Похоже, у меня просто была опечатка - я добавил () после одного из моих типов в объявлении функции, вероятно, из копирования и вставки из вызова функции в 3 часа ночи, что вызывало несоответствие.
Итак, если кто -то задается вопросом, да, это возможно, и вышеприведенное - вполне приемлемый способ сделать это.