为什么不能用结构定义模板?

Why can't you define a template with a struct?

本文关键字:定义 结构 不能 为什么      更新时间:2023-10-16

非常直接:

template <class T>
void foo() {}  //compiles
template <struct T>
void goo() {}  //doesn't

为什么?

class只是表示T是类型的关键字。这实际上并不意味着T必须是一个类。(例如,您可以拨打foo<int>()。)

使用class关键字是因为添加模板功能时typename不存在。请参阅c++中的Templates,typename和class。

因为模板必须用class或。。。

template <typename T>
void foo() {}

因为,语法禁止它:

template-declaration: 
export_opt template< template-parameter-list > declaration
template-parameter-list:
template-parameter
parameter-declaration
type-parameter:
class identifier
class identifier = type-id
typename identifier
typename identifier = type-id
template < template-parameter-list > class identifier
template < template-parameter-list > class identifier = template-name

或者,您可以认为struct是类的特殊情况,其中成员都是公共的。因此,在模板参数列表中允许它并不是一般性的。