【C++模板】C++声明模板时能否用struct关键字代替class或者typename
2017-03-20 19:04
288 查看
我们知道C++中声明一个函数或者类的模板支持两种关键字class和typename:
template <class T>
struct Person
{
public:
T age;
};
或者
template <typename T>
struct Teacher
{
public:
T age;
};
而且我们知道在C++中struct和class关键字基本上是等价的,因为要兼容C语言,所以C++保留了struct关键字并且它等价于class关键字,那么在模板里面是不是可以用struct替代class呢?
如下面的代码:
template <struct T>
struct Person
{
public:
T age;
};
答案是否定的,会出现下面的编译错误:
想必这也在预料中,C++保留struct关键字主要是为了兼容C语言,但是在C语言中是不存在模板的,所以没有必要再模板中支持strcut声明模板形参。
template <class T>
struct Person
{
public:
T age;
};
或者
template <typename T>
struct Teacher
{
public:
T age;
};
而且我们知道在C++中struct和class关键字基本上是等价的,因为要兼容C语言,所以C++保留了struct关键字并且它等价于class关键字,那么在模板里面是不是可以用struct替代class呢?
如下面的代码:
template <struct T>
struct Person
{
public:
T age;
};
答案是否定的,会出现下面的编译错误:
想必这也在预料中,C++保留struct关键字主要是为了兼容C语言,但是在C语言中是不存在模板的,所以没有必要再模板中支持strcut声明模板形参。
相关文章推荐
- C++中声明类的class与声明结构体的struct关键字详解
- c++模板编程-typename与class关键字的区别
- C++的template模板中class与typename关键字的区别分析
- C++中typename和class在声明模板时的区别
- C++箴言:模板声明中 class 和 typename 有什么不同?
- C++模板中关键字typename与class的区别
- 从零开始学C++之模板(三):缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename
- 关于C/C++中 Class, Struct, enum的定义声明位置
- C++ Template 中的typename、class关键字
- C++ Template 中的typename、class关键字
- C++ 模板中的template typename 和template class的区别
- C++ 模板中的typename和class的区别
- 从零开始学C++之模板(三):缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename
- C++ Template 中的typename、class关键字
- c++中关于模板的typename和class的区别
- 关于C++中模板中的typename和class的区别比较
- C++ Template 中的typename、class关键字
- C++ Template 中的typename、class关键字
- 在C中用struct实现C++中class的函数声明和定义
- C++ Template 中的typename、class关键字