Вопрос

Можно ли использовать шаблон шаблона, чтобы использовать все случаи параметра шаблона, который сам по себе является шаблоном?

Я использую шаблон для получения вывода отладки для некоторых методов на основе шаблонов. Сначала я создал общего обработчика, а затем специализировал его для нативных типов:

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 часа ночи, что вызывало несоответствие.

Итак, если кто -то задается вопросом, да, это возможно, и вышеприведенное - вполне приемлемый способ сделать это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top