2012-04-12 108 views
1

模板類的實現必須包含在定義它的頭文件中。這種類的實現應該在課堂上還是定期進行(就像你對其他課程所做的那樣),而只是在頭文件中完成?C++:模板實現(代碼樣式)

我與常規方法的問題是,實施變得非常臃腫,因爲您需要將模板定義面前。我想知道哪個是最常用的方法。

+0

代碼風格的問題不就這麼走了。 – ildjarn 2012-04-12 21:17:24

+0

如果知道所有將被實例化的類型,那麼該實現可以位於cpp文件中,然後在該.cpp文件中將其實例化。 – 2012-04-12 22:32:52

+0

可能的重複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

回答

1

可能是最常見的方式是編寫類的定義,然後寫在執行另一個文件,然後#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 
} 
+0

我通常看到後綴'.inl',但只要它不是'.h'和'.cpp',它就不重要了。 – 2012-04-12 21:27:25

+0

Boost在此場景中使用'.ipp'。 – ildjarn 2012-04-12 22:53:38