Параметр шаблона шаблона в функции - PullRequest
11 голосов
/ 16 октября 2011

Это допустимая конструкция шаблона в шаблонах C ++?

template < template <typename T2> class T> 
void foo() {

}

1 Ответ

13 голосов
/ 16 октября 2011

Да. Это действительно.

Вы можете вызывать эту функцию с любым шаблоном класса, который принимает точно один параметр шаблона. Например,

template<typename T> 
struct A
{
   //...
};

foo< A >(); //ok

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

foo< A<int> >(); //error

Кроме того, в вашем коде T2 является необязательным, и фактически вы не можете использовать его в функции, поэтому лучше удалите его, чтобы упростить определение:

template < template <typename> class T> 
void foo() {

    T<int> x; //this is how T can be instantiated; provide template argument!
}

Демо: http://ideone.com/8jlI5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...