template

来源:互联网 发布:单桂敏艾条淘宝旗舰店 编辑:程序博客网 时间:2024/05/21 09:52

template允许定义以数据类型为参数的函数和class

template<class T>

这叫template prefix,它告知compiler它后面的函数定义是一个template并且T是type parameter,这里class的是指数据类型(而不代表类)。当使用template时,只会对每一种使用的数据类型产生对应的函数/class定义

template<class T>void swap(T &a, T &b) {T temp;tmp = a;a = b;b = temp;}


许多compiler不支持template function declaration和separate compilation,所以最安全的方法就是不要使用template function declaration,并且保证在template function被使用的同一个文件中对其进行定义(但是template function的定义可以通过#include实现,当然也有一些compiler不支持这样做)

function template可以有多个type parameter,但是不能出现未被使用的template parameter,也就是说每一个template parameter一旦出现就必须被使用

template<class T1, class T2>


在写template function时,最好先定义不是template的function,确定没有问题后再加上template定义


使用class template的语法如下,注意scope resolution operator("::")前要使用Pair<T>而不是Pair

template<class T>class Pair{public:Pair();Pair(T first_value, T second_value);void set(int position, T value);T getValue(int position);private:T value1;T value2;};template<class T>Pair<T>::Pair(T first_value, T second_value) : value1(first_value), value2(second_value){}template<class T>void Pair<T>::set_element(int position, T value){if(position == 1)value1 = value;else if(position == 2)value2 = value;else{cout << "invalid input\n";exit(1);}...Pair<int> score;Pair<char> seats;

0 0
原创粉丝点击