一句话总结:将参数类型抽象化,定义在头文件中。关键字:template、typename、class(不代表类)
// CTemplate.hpp
// CppProduct
//
// Created by zhaojunyan on 17/6/18.
// Copyright © 2017年 zhaojunyan. All rights reserved.
//
#ifndef CTemplate_hpp
#define CTemplate_hpp
#include <stdio.h>
//函数模板
template <typename T> //等价于template <class T>
T myMax(T t1, T t2) {
return t1 > t2 ? t1 : t2;
}
template <int size>
void printSize() {
std::cout<<size<<std::endl;
}
template <typename T>
void printCnts(T t1, int cnt) {
for (int i; i < cnt; ++i) {
std::cout<<t1<<std::endl;
}
}
template <typename T1, typename T2>
void printPara(T1 t1, T2 t2) {
std::cout<<t1<<std::endl;
std::cout<<t2<<std::endl;
}
//类模板: 函数定义也需在头文件中
template <class T1, class T2, int size>
class CTemplate {
T1 value;
public:
void printMember();
};
template <class T1, class T2, int size>
CTemplate<T1, T2, size>::CTemplate()
{}
template <class T1, class T2, int size>
CTemplate<T1, T2, size>::~CTemplate()
{}
template <class T1, class T2, int size>
void CTemplate<T1, T2, size>::printMember()
{
std::cout<<size<<std::endl;
return;
}
#endif /* CTemplate_hpp */
//模板函数
int value = myMax(10, 100);
char c = myMax<char>('A', 'B');
printPara<int, string>(19, "printPara");
//模板类
CTemplate<int, int, 5> cTemplate;
cTemplate.printMember();