C++模板的聲明與實現分離的方式

第一種方式:頭文件聲明模板,源文件實現模板,頭文件末尾include源文件

#pragma once
// 類模板
template<typename T>
class TestClass
{
public:
    TestClass(const T&);
    void printFunc();
};

// 函數模板
template<typename T>
void funcTempl();

#include "TestClass.cc" // 相當於把源文件的內容在此展開

 

// 實現文件

template<typename T>
TestClass<T>::TestClass()
{

}

template<typename T>
void funcTempl()
{

}

 第二種方式: 源文件中實例化模板

#pragma once
template<typename T>
class TestClass
{
public:
    TestClass();
};

template<typename T>
void funcTempl();
#include "TestClass.h" // 包含模板聲明文件
template<typename T>
TestClass<T>::TestClass()
{
}

template class TestClass<int>; // 直接在源文件中提供實例化版本,這個方法的侷限性就是需要在這個實現文件提供出你所需要的所有實例化版本
tempalte class TestClass<float>;
template class TestClass<string>;
// 這裏只提供三個實例化版本,也就意味着其他地方只能使用這三個實例化版本定義變量


template<typename T>
void funcTempl()
{
}

template void funcTempl<int>();
template void funcTempl<double>();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章