模板

模板的定义与声明需放在一个头文件中,尽量不要分离为.h/.cpp的形式,用户在使用时包含该头文件即可
\color{red}{(为了生成一个实例化版本,编译器需要掌握函数模板与类模板成员函数的定义)}

  1. 函数模板---自动推断模板参数类型实例化
//// .h  声明+定义
template<typename T>
T function(const T&v1, const T&v2)
{
    return v1+v2;
}

/// .cpp test
function(1,2);
  1. 类模板---需要在模板名后尖括号内提供参数类型(无法自动推断)
    类模板的每个实例都会生成一个独立的类
/// .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);
  1. 控制实例化(显示实例化)---解决多个文件中实例化相同模板的问题(c++新标准)
    \color{red}{还未完全理解 20201209}
extern template class Print<int>;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。