2016-11-19 56 views
0

我在Visual Studio 2015中編碼C++。我有一個名爲superpixel.h和superpixel.cpp的文件。我想爲一些功能使用模板,但是我讀到我無法在cpp文件中定義模板。我不想在頭文件中定義模板,因爲它只會使我的代碼與頭文件和cpp文件中的定義混淆。cpp中的模板函數

有沒有解決這個問題的方法?我是否必須將所有cpp文件切換到hpp?

+0

某些內容創建了包含在.h文件底部的.inl(內嵌)文件。這個文件將包含所有的模板方法。 – Shaggi

+0

當我第一次學習模板時,我對此也有些惱火。聽起來有點令人難以置信,但我做了一些Google,看起來很標準,只是在頭文件中執行,所以我接受了它。 –

回答

0

使用模板的任何內容都需要訪問模板,這意味着它必須包含在內。我所看到的大部分內容都是將整個定義放到標題中,儘管您可以將它移到其他文件中幷包含它。如果你將每個類的頭文件保存爲一個,那麼希望它不會那麼混亂。

您不必將所有cpp文件切換到hpp。這些只是擴展,它們大多不重要。儘管只有在代碼大部分是模板時,您才需要考慮去掉頭文件,因爲無論如何,模板代碼必須位於頭文件中,而只有頭文件的項目通常更容易包含在其他項目中,因爲您不必擔心鏈接。

+0

這是個不好的建議。頭文件和源代碼的全部要點是,當你包含頭文件時,它只包含頭文件的請求部分,這使頭文件中包含的代碼要小得多。 – matt2405

+0

只有頭文件庫實際上是一種非常普遍的做法。請參閱[Boost](http://www.boost.org/),它可能是最常用的C++庫。但這主要取決於作者。傳統的路線和動態鏈接有時也非常有用。但無論哪種方式,模板代碼_must_都必須位於頭文件中,才能在包含它的位置工作。或者如果模板專門化是在其他地方定義的話,至少是基本模板。那些必要的專業也必須包含在內。 – danielunderwood