c++ templates

一、function template:

template<class T>

void swap (T& x, T& y)

void foo(void)

foo<int>();    √

foo<float>(); √

在swap中可以使用T来代替数据类型,在实际使用的时候T可以是任意数据类型

T可以用来做参数的类型,也可以做返回值类型,也可以用来做变量的声明

template是一个declaration

编译时不对template做任何操作,只是记录

在运行时,在调用函数出使用template创造一个新的函数

使用template中没有类型转换。如果函数中涉及template的地方需要进行自动类型转换会报error

函数重载overload规则:

1.检查唯一函数匹配

2.检查唯一函数模板匹配

二、class template

template <class T>

class vector{.....}

vector<int> v1(100);

vector<complex> v2(256)

类的成员函数,每一个函数都是函数模板(function template)

都要写成如下格式:

template <class T>

vector<T>::f (...) {...} 

template function

template class

----------------------------------------------------------------------------------------------------------

template会导致编译时多遍扫描

template中可以有多个参数

template<class Key, class Value>

注意template的尖括号,前后加空格以防与其他符号相连形成其他符号(如>>)

在实际应用中尖括号的里的内容可能会相当复杂

Vector< int (*)(Vector<double>&, int)>

------------------------------------------------------------------------------------------------------------

template的参数列表除了可以包含类,还可以包含常数表达式

template <class T, int bounds = 100>  其中100为参数默认值

class FixedVector{......};

---------------------------------------------------------------------------------------------------------

FixedVector<int, 50> vl;

FixedVector<int, 10*5> v2;

FixedVector<int> v3; // uses default

---------------------------------------------------------------------------------------------------------

文件中声明了一个class template

在实际应用中可能在多个cpp文件中生成相同的class of sometype(而且会同名)

在链接时会出现问题:调用时不知道应该链接哪一个

解决方法:

1.在名字前加上文件的前缀

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值