C++ 模板的具体化

来源:互联网 发布:剪辑师软件使用方法 编辑:程序博客网 时间:2024/05/16 07:22
模板的具体化


1.隐式实例化
implicit instantiation
声明一个或多个对象, 指出所需的类型, 而编译器使用通用模板提供的处方生成具体的类定义
MyArr<int, 100> arr; // 
而编译器做需要对象之前, 不会生成类的隐式实例化;
MyArr<double, 30> *pt; // implicit instantiation , no object needed yet
pt = new MyArr<double, 30>; // now an object is needed;


2.显式实例化explicit instantiation
当时用关键字template并指出所需类型来声明类时, 编译器将生成类声明的显示实例化。声明必需位于模板定义所在的名称空间中。
template class MyArr<double, 100> // 在这种情况下, 虽然没有创建或提及类现象, 编译器也将生成类声明(包括方法定义, 和隐式实例化一样, 也将根据通用模板来生成具体化

3.显示具体化explicit specialization 是特定类型(用于替换模板中的通用类型)的定义。有时候, 可以需要在为特殊类型实例化时, 对模板进行修改, 使其行为不同。 做这种情况下, 可以创建显式具体化。

template<> class SortedArray<char *>

4. 部分具体化partial specialization, 即部分限制模板的通用性。

// general template
template<typename T, class T2>
class Pair {};
// specialization with T2 set to int
template<typename T>
class Pair<T, int> {}
原创粉丝点击