你所不知道的C++ 之 C++模板的部分实例化

在很多模板库中,都用到了C++的部分实例化。

所谓部分实例化,是这样的

template<class T> class A {       // 主模板
     int x;
};
template<class T> class A<T*> {   // 半实例化模板
    long x;
};
template<template<class U> class V> class C {
    V<int> y;
    V<int*> z;
};

C<A> c;

C<A>::V<int> 使用的是主模板,因此c.y.x 类型为int;

C<A>::V<int*> 使用的是半实例化的模板,因此c.z.x类型为long.


再有例子

template<int I, int J, class T> class X { };                 // #1
template<int I, int J>                class X<I, J, int> { }; //#2
template<int I>                         class X<I, I, int> { };  //#3

template<int I, int J> void f(X<I, J, int>);  //#A
template<int I>        void f(X<I, I, int>);  //#B
模板#1是主模板,#2和#3是半实例化的模板,其中#3的实例化程度要比#2要高。所以,函数 #B使用的是模板#3而不是模板#2。函数#A使用模板#2。


你可能感兴趣的:(你所不知道的C++ 之 C++模板的部分实例化)