《C++ Templates》深入模板基础(一)——模板参数问题(重点待补全)

模板参数的问题:

对于模板参数的使用可以分为三大类:

1.类型参数;

2.非类型参数;

3.模板的模板参数;

 

针对于类型参数:

其实就是我们所最常使用的类类型,通常在模板参数列表中需要typenmae进行声明,往往是一个类或者某种类型;

可以说是最常见的一种;

 

针对于非类型参数:

之前提到过,例如典型的内置类型就是我们所需要的非类型参数;

通常来说,非类型参数往往有以下几种:

1.整型或者枚举类型;

2.指针类型:函数指针、普通对象指针、指向成员的指针;

3.引用类型:指向对象和函数的引用;

其中值得注意的是,对于非类型参数,我们常见的int是不需要在模板参数列表中加入typename,但是有一些依赖型函数则需要,这个要视情况而定,后面书中第九章会讲到这个;

 

当然函数和数组类型也可以当成非类型参数,但是其实是编译器和环境通过隐式转化而构成,这个需要注意一下;

 

针对于模板的模板参数:

个人认为这是一种很华而不实的东西,看了这么多例子也觉得很操蛋,完全可以分开写;

但是后来细细品了品,发现其实是在为不同的类内初始化做准备;

不妨考虑之前的那个模板的模板参数形式:

template <typename T, template<typename U,typename =std::allocator<U>> class CONT = vector > class A {
private:
	CONT<T,list<int>> A;
};

其中第二个参数模板给定了一个缺省参数模板CONT,其中CONT拥有两大初始化类型,U以及用于分配空间的allocator,其中allocator也采用U进行初始化;

多以可以大致看出,第二个参数模板主要是针对于匹配vector、map、list等STL的的类型,所以其实也是为了已知的类型服务;

所以模板的模板参数个人认为主要是为特殊的类定制化服务,而不是像普通模板进行内置或者函数类型、简单模板类类型传参;

上一篇:【报错】An error happened during template parsing (template: "class path resource [templates/hello1


下一篇:《C++ Templates》 技巧性基础知识