模板的定义与声明需放在一个头文件中,尽量不要分离为.h/.cpp的形式,用户在使用时包含该头文件即可
- 函数模板---自动推断模板参数类型实例化
//// .h 声明+定义
template<typename T>
T function(const T&v1, const T&v2)
{
return v1+v2;
}
/// .cpp test
function(1,2);
- 类模板---需要在模板名后尖括号内提供参数类型(无法自动推断)
类模板的每个实例都会生成一个独立的类
/// .h 声明+定义
template<typename T> class Print
{
public:
Print();
Print(const T& a);
private:
T a_;
};
template<typename T>
Print<T>::Print()
{
a_ = 0;
std::cout << "a = " << a_ << std::endl;
}
template<typename T>
Print<T>::Print(const T& a)
{
a_ = a;
std::cout << "a = " << a_ << std::endl;
}
/// .cpp Test
Print<int> print(2);
- 控制实例化(显示实例化)---解决多个文件中实例化相同模板的问题(c++新标准)
extern template class Print<int>;