Тип шаблона шаблона?
При использовании синтаксиса шаблона шаблона, как в template <template <typename> class T>
, необходимо использовать ключевое слово class
, поскольку использование typename
приводит к ошибке в следующих строках:
ошибка: параметр шаблона шаблона требует "класс" после списка параметров
В остальном ключевые слова typename
и class
взаимозаменяемы в основном случае объявления параметра шаблона.
Вы можете возразить, что требование при использовании шаблона шаблона является подсказкой о том, что вы должны передать тип класса, но это не всегда так (особенно после того, как C ++ 11 представил псевдонимы шаблонных типов). .
template <template <typename> class T> // 'class' keyword required.
struct Foo {
using type = T<int>;
};
template <typename T>
using type = T (*)();
using func_ptr_t = Foo<type>::type;
Что за этим стоит?
- Есть ли какая-то конкретная причина, почему
typename
не разрешен в объявлениях шаблонов шаблонов? - Говорит ли что-нибудь об этом стандарт C ++?
typename
прямо сейчас. - person chris   schedule 06.06.2014