0
是否將模板函數的主體放置在頭文件或其相應的cpp文件中?爲什麼?標題或cpp中的模板函數體
我有一些代碼,我稍微修改了一下,這要感謝Nikos Athanasiou所寫的答案,在this線程上找到並在下面看到。目前,我在一個頭文件中包含以下所有代碼。
我已經閱讀了那裏的主題,解釋瞭如何在cpp文件中的頭文件和模板函數體中使用模板函數定義,但是我想知道哪個會被認爲是正確的。這兩種選擇都有哪些表現優缺點?
typedef std::chrono::duration<float> fsec;
template<typename F, typename... Args>
float ftime_fsec(F func, Args&&... args){
auto t1 = std::chrono::high_resolution_clock::now();
func(std::forward<Args>(args)...);
return std::chrono::duration_cast<fsec>
(std::chrono::high_resolution_clock::now() - t1).count();
}
如果是模板方法,您必須將其保存在頭文件中。在它以某種方式實例化之前,它不能被渲染成機器代碼。這就是編譯器知道具體實現將會是什麼樣子的時候了。 – tadman
[爲什麼模板只能在頭文件中實現?]可能重複(http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file) – Amadeus
我看到那個線程;然而,線程明確提到你不需要將實現放在頭文件中,並且相同的答案提供了一個解決方案,以便將它放在cpp文件中。我的問題是更多的天氣或不是適當的,甚至值得將實現移動到cpp文件。謝謝! – hbchevelle68