C++:关于模板类 作者到底在说什么 我想弄明白
(1)从一个模板类和一个模板参数生成一个类声明的过程通常被称为"模板实例化"问:将参数传进去替换到模板中的参数之后这个模板类不就成普通类了么,不就是个类定义了么书上咋还管...
(1)从一个模板类和一个模板参数生成一个类声明的过程通常被称为"模板实例化"
问:将参数传进去替换到模板中的参数之后这个模板类不就成普通类了么,不就是个类定义了么 书上咋还管这叫类声明呢?
(2)针对一个特定模板参数的模板版本被称为是一个"专门化"
问:这里的专门化是什么意思啊?就是传进参数将模板类变为普通类,然后再用这个普通类传参数创建对象么?
作者到底在说啥子呢-。-哎呀 我就是喜欢咬文嚼字啊 欢迎来解答 展开
问:将参数传进去替换到模板中的参数之后这个模板类不就成普通类了么,不就是个类定义了么 书上咋还管这叫类声明呢?
(2)针对一个特定模板参数的模板版本被称为是一个"专门化"
问:这里的专门化是什么意思啊?就是传进参数将模板类变为普通类,然后再用这个普通类传参数创建对象么?
作者到底在说啥子呢-。-哎呀 我就是喜欢咬文嚼字啊 欢迎来解答 展开
2个回答
展开全部
第一个问题,完全是文字游戏的问题。没错,将参数常给模板,就是实例化,也就是LZ所理解的,在当前情况下成为了一个普通类。至于他所谓的类声明,就是说声明一下我的模板类变成了这样的一个实例类(也就是普通类),这个就和变量使用前写的int a(变量声明),意思差不多。
第二个问题,这里专门化,其实是想说,我这个模板是专门为了一个特定目标而创建的(即为所谓的特定参数)。也就是说这个模板并没有其他的模板那么强的普遍适用性,而仅仅是为了某个事情专门创建的。
反正对于C++模板方面的问题,有好多乱七八糟的概念,其实这些东西有时候没有太多细扣的必要,搞清楚怎么用,才是更重要的。
第二个问题,这里专门化,其实是想说,我这个模板是专门为了一个特定目标而创建的(即为所谓的特定参数)。也就是说这个模板并没有其他的模板那么强的普遍适用性,而仅仅是为了某个事情专门创建的。
反正对于C++模板方面的问题,有好多乱七八糟的概念,其实这些东西有时候没有太多细扣的必要,搞清楚怎么用,才是更重要的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1)一般的类,声明写在.h中,而实现一般写在.cpp中(直接写在.h中的也有)。而模板类,都是只有.h文件,没有.cpp的。也就是说,所有的模板类都是声明即定义的。模板实例化后成了一个普通类,这个类的声明和定义在一起。因此说类声明也可以。
2)专门化又叫特化(或者偏特化),是指对当模板的全部(或部分,叫偏特化)类型参数是特定类型时,启用特定算法和数据结构。比如,以std::vector<T>为例,当元素类型T为普通类型时,采用普通模板,容器内顺序的存放若干个T的实例;特别的,当元素类型为bool时,std::vector<bool>,则采用偏特化模板,容器内并非存放若干个bool的实例,而是按位存储,以节省空间。参见VC的vector源代码:
// TEMPLATE CLASS vector
template<class _Ty,
class _Ax = allocator<_Ty> >
class vector
: public _Vector_val<_Ty, _Ax>
{ // varying size array of values
...
// CLASS vector<bool>
template<class _Alloc>
class vector<_Bool, _Alloc>
: public _Vb_val<_Alloc>
{ // varying size array of bits
...
2)专门化又叫特化(或者偏特化),是指对当模板的全部(或部分,叫偏特化)类型参数是特定类型时,启用特定算法和数据结构。比如,以std::vector<T>为例,当元素类型T为普通类型时,采用普通模板,容器内顺序的存放若干个T的实例;特别的,当元素类型为bool时,std::vector<bool>,则采用偏特化模板,容器内并非存放若干个bool的实例,而是按位存储,以节省空间。参见VC的vector源代码:
// TEMPLATE CLASS vector
template<class _Ty,
class _Ax = allocator<_Ty> >
class vector
: public _Vector_val<_Ty, _Ax>
{ // varying size array of values
...
// CLASS vector<bool>
template<class _Alloc>
class vector<_Bool, _Alloc>
: public _Vb_val<_Alloc>
{ // varying size array of bits
...
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询