你所不知道的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。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值