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

时间:2012-03-12 18:23:44

标签: c++ templates

非常简单:

template <class T>
void foo() {}  //compiles

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

为什么?

3 个答案:

答案 0 :(得分:6)

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

使用了class关键字,因为添加模板功能时typename不存在。请参阅Templates in c++,typename and class

答案 1 :(得分:2)

因为必须使用class或...

声明模板
template <typename T>
void foo() {}

答案 2 :(得分:1)

因为,语法禁止它:

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是一个类的特例,其中成员都是公共的。因此,在模板参数列表中允许它不会那么普遍。