为什么不能用结构定义模板?
Why can't you define a template with a struct?
非常直接:
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是类的特殊情况,其中成员都是公共的。因此,在模板参数列表中允许它并不是一般性的。
相关文章:
- 在类构造函数中定义结构变量的参数
- C++ 通过函数传递自定义结构
- 在C++中循环访问自定义结构列表的小问题
- 如何在Qt中使用QDataStream将自定义结构保存/加载到二进制文件中?
- 如何在C++中的.h文件中的类中定义结构
- 如何定义C结构:C-linkage和udt
- 结构向量中自定义结构函数的内存使用
- 类型转换自定义结构
- 使用结构绑定更改自定义结构的值
- 信号槽自定义结构问题
- 如何将unordered_set与自定义结构一起使用?
- 定义结构中没有默认构造函数的类
- 为什么C++在自定义结构向量时会出现 ostream 重载问题?
- 通过自定义结构和链接列表类中的C 中的哈希表
- 从自定义结构数组中提取数据
- 无法使用自定义结构的属性
- 通过引用将自定义结构的向量传递给 boost::compute 闭包或函数
- 如何从输入中定义的"external" int 定义结构中的数组大小
- 定义结构数组
- 在Cython中定义C 结构返回类型