2012-05-06 29 views
0

可能重複:
Why can templates only be implemented in the header file?
Why should the implementation and the declaration of a template class be in the same header file?模板和分裂成的.h/.cpp文件

我要創建一對夫婦的ADT,並比較它們的性能(我參加一個數據結構課程並想進行實驗;注意:我們的教師使用Java)。我想創建泛型類,這樣我就不會陷入特定的數據類型。我很久以前就讀過,不可能分解模板類。保持代碼清潔的最佳方法是什麼?最明顯的方法是在不隱藏實現的情況下簡單使用.cpp文件,例如在java中。有沒有其他方法可以使用?

+0

簡短的答案是將它全部留在標題中。稍微長一點的版本是爲了確保它在編譯時結束於頭部。 (換句話說,如果你有多個文件,頭文件必須包含它們。) – Corbin

+0

你試圖避免在頭文件中定義你的方法嗎? –

+0

使用C++ 11 extern模板或將其保留在標題中。 – chris

回答

5

有些人使用標題中包含的「ipp」文件。

除此之外......它就是這樣。您不能將模板代碼放在編譯的文件中,並且可以在其外部使用它。

+1

.inl(for inline)也是直接包含在.h文件中的文件的常見擴展名,但並不意味着被其他.h/.cpps包含。 –

+1

.hpp也很常見 –

+0

我只看到.hpp的C++頭文件。所有的boost都是這樣完成的,但有時候它們會使用.ipp來實現。 –