模板類的實現必須包含在定義它的頭文件中。這種類的實現應該在課堂上還是定期進行(就像你對其他課程所做的那樣),而只是在頭文件中完成?C++:模板實現(代碼樣式)
我與常規方法的問題是,實施變得非常臃腫,因爲您需要將模板定義面前。我想知道哪個是最常用的方法。
模板類的實現必須包含在定義它的頭文件中。這種類的實現應該在課堂上還是定期進行(就像你對其他課程所做的那樣),而只是在頭文件中完成?C++:模板實現(代碼樣式)
我與常規方法的問題是,實施變得非常臃腫,因爲您需要將模板定義面前。我想知道哪個是最常用的方法。
可能是最常見的方式是編寫類的定義,然後寫在執行另一個文件,然後#include
在頭文件底部的執行文件,並沒有在文件列出它來編譯。這樣他們在不同的文件,但編譯器是滿意的,因爲定義和聲明是在預處理後在同一個文件。
例子:預處理完成
// header.h
template<typename T>
struct A {
int dostuff();
};
#include "header.template"
// header.template (not header.cpp, to make it clear that this doesn't get compiled)
template<typename T>
int A::dostuff() {
// do stuff
}
後,文件看起來像
template<typename T>
struct A {
int dostuff();
};
template<typename T>
int A::dostuff() {
// do stuff
}
我通常看到後綴'.inl',但只要它不是'.h'和'.cpp',它就不重要了。 – 2012-04-12 21:27:25
Boost在此場景中使用'.ipp'。 – ildjarn 2012-04-12 22:53:38
代碼風格的問題不就這麼走了。 – ildjarn 2012-04-12 21:17:24
如果知道所有將被實例化的類型,那麼該實現可以位於cpp文件中,然後在該.cpp文件中將其實例化。 – 2012-04-12 22:32:52
可能的重複http://stackoverflow.com/questions/8662517/do-template-class-member-function-implementations-always-have-to-go-in-the-heade/8662746#8662746 – 2012-04-13 05:09:40