C++ 模板
C++ 模板使用有点类似于Java中的泛型。
- 普通函数模板
- 类模板
- 类成员函数为模板函数
测试例子
#include <iostream>
#include <type_traits>
#include <string>
// 测试Terminal VT100 颜色打印效果
// 一般Terminal都支持256颜色
void print_vt100()
{
std::string s;
for(int i = 1; i < 256; i ++){
s.append("\033[");
s.append(std::to_string(i));
s.append(";1m");
s.append(std::to_string(i));
s.append("\033[0m");
std::cout << s << " ";
s.clear();
}
std::cout << "\n";
}
//普通模板函数 定义
template <typename T>
typename std::enable_if<std::is_same<int,T>::value,T>::type add(T & a,T &b)
{
return a +b;
}
// 普通模板函数 定义
template <typename T>
void print(T & t){
std::cout << "T \033[33;1m" << t << "\033[0m\n";
}
class A {
public:
A(){
}
// 类成员函数 模板函数
template <typename T>
void print(T & t){
std::cout << "T \033[31;1m" << t << "\033[0m\n";
}
};
// 模板类 定义
template <typename T>
class B{
public:
T & t;
B(T & t):t(t){
}
// 模板类中模板成员函数
template <typename S>
void print(S & s){
std::cout << "T \033[32;1m" << t << s << "\033[0m\n";
}
};
int main()
{
print_vt100(); // 测试 VT 100
print("hello"); // 普通模板函数
A a;
a.print("Hello A"); // 类成员模板函数
std::string s("Hello B");
B<std::string> b(s); // 类模板
b.print(" BB"); // 类模板函数
int num = 4;
int num1 = 5;
std::cout << add<int>(num,num1) << std::endl;
return 0;
}
注意: 编译时,请加上 -std=c++11.