2008-08-30 65 views
22

當在多個文件中聲明模板時,C++似乎相當粗糙。更具體地說,當使用模板化類時,鏈接器期望在單個編譯器對象文件中的類的所有方法定義。當你考慮標題,其他聲明,繼承等等時,事情變得非常混亂。模板分佈在多個文件中

是否有任何常規建議或變通方法來組織或重新分發跨多個文件的模板成員定義?

回答

23

有沒有組織或跨多個文件重新分配模板成員定義的任何一般性的建議或解決方法?

是;別。

的C++規範允許編譯器能夠「看到」整個模板(聲明定義)在實例化的點,(由於任何實現的複雜性),大多數編譯器保留了這一要求。結果是,包含任何模板頭文件必須包含實例化模板所需的任何和所有源文件。

解決這個問題的最簡單方法是將所有內容轉儲到標題中,並在需要時在內聯的地方進行內聯。

如果你真的認爲這是一個不可接受的侮辱,一個常見的選擇是將模板分割成通常的頭/實現對,然後#在頭的末尾包含實現文件。

C++的「導出」功能可能提供或不提供其他解決方法。該功能支持不足,定義不明確;儘管它原則上應該允許某種模板的單獨編譯,但它並不一定會避免編譯器能夠看到整個模板體的需求。

5

跨多少個文件?如果您只想將類定義與實現分開,請在C++ faq中嘗試使用this article。這是我目前知道的唯一方法,但是一些IDE(例如Eclipse CDT)不會正確地鏈接此方法,並且您可能會遇到很多錯誤。然而編寫自己的makefile或使用Visual C++中,這一直爲我工作:-)

+0

+1的文章鏈接 – 2013-06-18 19:20:51