模板专门化中的Class关键字,用于指定从属名称是类型吗?

时间:2018-09-14 03:58:33

标签: c++ templates

为什么在模板专门化中为什么要使用class代替typename来指定从属名称是类型?它仅适用于模板专业化,这使我感到困惑。这不是问类型名是什么的问题,而是为什么classtypename在专业化中做相同的事情。

template<typename T, typename = void>
class Foo
{

};

template<typename T>
class Foo<T, typename std::enable_if<(std::is_arithmetic<T>::value)>::type>
{

};

这可以很好地编译,但是这样做:

template<typename T, typename = void>
class Foo
{

};

template<typename T>
class Foo<T, class std::enable_if<(std::is_arithmetic<T>::value)>::type>
{

};

为什么会这样?我没有指定新的模板参数,只是专门化了。另外-它不适用于模板声明:

template<typename T, class std::enable_if<(std::is_arithmetic<T>::value)>::type>
class Foo
{

};

这不会编译,但是如果您用typename替换类,它将编译。

0 个答案:

没有答案