当使用模板模板语法时template <template <typename> class T>,需要使用关键字class,因为using typename会给出以下行的错误:
错误:模板模板参数在参数列表后面需要'class'
在其他地方的关键字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;
Run Code Online (Sandbox Code Playgroud)
typename在没有模板模板声明允许吗?在C++中,模板模板参数只能与class关键字一起引入.为什么以下是非法的:
template<template<typename> typename C>
struct A {};
Run Code Online (Sandbox Code Playgroud)
鉴于最近的一项提案(在isocpp.org标题中有特色)试图克服它,我正在寻找这种限制背后的理性.