Здравствуйте, NikolayVoronetskiy, Вы писали:
NV> Искомое решение для функции выглядит так:
NV> NV> template<class T> void Foo(){ std::cout << "class\n"; }
NV> template<template<class> class T> void Foo(){std::cout << "template<class>\n";
NV>
Я так понимаю в этом случае у тебя никакой специализации нет. Зато есть перегрузка.
NV> Задача в том, чтобы таким же образом специализировать шаблон класса, грубо говоря:
NV> NV> template<class T> class Bar { static void print(){std::cout << "class\n";} };
NV> template<template <class> class T> class Bar { static void print(){std::cout << "template<class>\n";} };
NV>
ИМХО, не получится так. Если мы специализируем первый вариант (где передается тип T), то параметром в любом случае будет ожидаться тип. Если мы специализируем второй вариант (где передается шаблон), то параметром в любом случае будет ожидаться шаблон. Чтобы превратить шаблон в тип, нужно его инстанцировать. Иными словами аргументы шаблона в такой ситуации нужно будет тоже передать так или иначе.