Страницы

Поиск по вопросам

пятница, 9 ноября 2018 г.

Шаблон в качестве параметра шаблона

Как правильно передавать шаблон в качестве параметра другому шаблону?
template < typename T > struct A{};
template < template < typename > class C > struct B{};
typedef A < int > A_int; typedef A < float > A_float;
typedef B < A_float > B_A_float; // error C3200: 'A_float' : invalid template argument for template parameter 'C', expected a class template typedef B < A < float > > B_A_float; // error C3200: 'A' : invalid template argument for template parameter 'C', expected a class template typedef B < A > B_A_float; // компилируется но бесполезно
необходимо использовать в шаблоне разные специализации шаблона, но компилятор позволяет вставить только сам класс


Ответ

Если Вы хотите просто передать шаблону какой-то тип, то в качестве параметра шаблона надо использовать параметр-тип:
template struct foo { X x; }; // ^ параметр-тип. ^ используется как тип.
foo obj; // ОК, передали тип int, получили поле "int x;" foo> obj; // ОК, передали тип vector, получили поле "vector x;" foo // не ок. "vector x;" не компилируется
А если же надо передать шаблону шаблон, то параметром должен быть параметр-шаблон:
template class X> struct foo { X x; }; // ^ параметр-шаблон. ^ используется как шаблон.
foo obj; // ОК, передали шаблон vector, получилось поле "vector x;" foo obj; // не ок. "int x;" не компилируется foo> obj; // не ок. "vector x;" не компилируется

Комментариев нет:

Отправить комментарий