根據 Storing C++ template function definitions in a .CPP file能模板摘要(純虛擬)類的定義放在源文件C++
很容易seprate界面和模板類的實現,
.h文件中
template<typename T>
class foo
{
public:
foo();
~foo();
void do(const T& t);
};
.cpp文件
template <typename T>
void foo::foo()
{
// initiate
}
//destructor
template <typename T>
void foo::do(const T& t)
{
// Do something with t
}
void foo<int> fi;
void foo<std::string> fs;
竅門是通過在.cpp文件末尾創建實例來專門化模板類。
但是,如果這是一個純虛模板類
.h文件中
template<typename T>
class foo
{
public:
foo();
~foo();
virtual void do(const T& t) = 0;
};
,我們從這個派生的具體類:
template<typename T>
class foobar : public foo<T>
{
public:
void do(const T& t);
};
源文件此課程看起來像
cpp文件
template <typename T>
void foobar::do(const T& t)
{
// Do something with t
}
void foobar<int> fi;
void foobar<std::string> fs;
和foo的源文件看起來除了灌頂同一被除去(因爲現在ofcourse foo是一個抽象類)。
但現在有一個鏈接器錯誤; foo<int>()
在foobar<int>
的構造函數中未解決。這通過將foo的構造函數和析構函數移回源文件的頭文件來解決。
所以我的問題是我們如何創建抽象模板基類,並保持隱藏在源文件中的模板類的定義?
非抽象'foo'鏈接? –
2010-09-06 09:44:01