打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何用默认参数类型实例化模板
模板可以具有默认参数。在实例化(具体化)这样一个具有默认参数的模板时,如果你不显式地指定参数,编译器会插入这些默认参数。标准库(Standard Library)使用这一特性非常多,(比如说)这样就能够使你忽略掉 STL 容器的分配器(allocator)和traits classes。

下面的类模板有两个模板参数T1 和 T2,每个参数有一个默认值:

template <class T1=char, class T2=int >
class C
{
 public:
  C (T1 t1, T2 t2) : m1(t1), m2 (t2) {}
 private:
  T1 m1;
  T2 m2;
//..
};

如同一般的具有默认参数值的函数一样,如果一个模板参数具有一个默认值,所有后续模板参数必须也要具有默认参数:

template<class T1=int, class T2> class X;   // error
template <class T1, class T2=int> class Y;   // OK

实例化

在实例化这样的模板时,你可以忽略一些或全部具有默认值的参数,或者不忽略具有默认值的参数。下面的例子展示了模板 C 的两个具体化过程。第一个实例显式地指定了所有的参数;第二个忽略了最后一个参数:

int main()
{
 C < int, double > c1(0,0.0); // no defaults used
 C < bool > c2(true, 6); // OK, second arg defaults to int
}

在具体化时,如果模板的所有参数都具有默认值并且都使用默认值,那么要在模板的名称后提供一对空的尖括号。忽略掉空的尖括号是一个错误:

C e3( 'a',8);   //error; missing < >
C <> e4 ('a', 8);   //OK, instantiates C <char, int>

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
<C++实践系列>C++中的模板(template)
2.11 模板函数的默认模板参数
函数模板和模板函数
模板
template用法
C++中的类模板详细讲述
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服