c++ templete

来源:互联网 发布:ardupilot源码下载 编辑:程序博客网 时间:2024/06/03 16:52

函数模板

#include <iostream.h>template <class T> T GetMax (T a, T b) {    T result;    result = (a>b)? a : b;    return (result);}int main () {    int i=5, j=6, k;    long l=10, m=5, n;    k=GetMax(i,j);    n=GetMax(l,m);    cout << k << endl;    cout << n << endl;    return 0;}

运行结果

类模板#include <iostream.h>template <class T> class pair {     T value1, value2;public:    pair (T first, T second) {        value1=first;        value2=second;    }    T getmax ();};template <class T>T pair::getmax (){    T retval;    retval = value1>value2? value1 : value2;    return retval;}int main () {    pair myobject (100, 75);    cout << myobject.getmax();    return 0;}

这里写图片描述

模板特殊化(Template specialization)
模板的特殊化是当模板中的pattern有确定的类型时,模板有一个具体的实现。例如假设我们的类模板pair 包含一个取模计算(module operation)的函数,而我们希望这个函数只有当对象中存储的数据为整型(int)的时候才能工作,其他时候,我们需要这个函数总是返回0。这可以通过下面的代码来实现:

// Template specialization#include <iostream.h>template <class T> class pair {    T value1, value2;public:    pair (T first, T second){        value1=first;        value2=second;    }    T module () {return 0;}};template <>class pair <int> {    int value1, value2;public:    pair (int first, int second){        value1=first;        value2=second;    }    int module ();};template <>int pair<int>::module() {    return value1%value2;}int main () {    pair <int> myints (100,75);    pair <float> myfloats (100.0,75.0);    cout << myints.module() << '\n';    cout << myfloats.module() << '\n';    return 0;}

这里写图片描述

http://blog.csdn.net/zqixiao_09/article/details/51474589