例子: 說我包括我的預編譯頭文件:在預編譯頭文件中實例化模板會減少編譯時間嗎?
#include <vector>
作爲載體的少數情況下,如性病::載體,性病::向量等等都在我的項目經常使用,將它減少編譯時間,如果我在這樣的precomiled頭實例他們還有:
#include <vector>
template class std::vector<float>;
template class std::vector<int>;
的進一步深入,將是有意義的,即使添加的虛擬功能,它使用的一些功能的預編譯的頭:
namespace pch_detail {
inline auto func() {
auto&& v = std::vector<float>{};
v.size();
v.begin();
v.front();
}
}
我很不確定翻譯單元和模板是如何工作的,所以在我看來,如果我在預編譯的頭文件中實例化它們,它應該表示它們不需要爲每個.cpp文件實例化。
更新
測試在使用Visual Studio 2017年真實世界的代碼庫和常用模板類的一些實例。
- 與普通模板類實例化:71731毫秒
- 沒有實例:68544毫秒
因此,至少在我的情況下,花了稍微花更多的時間。
是編譯的時候真的是你需要解決的一個問題?上次我遇到這樣的問題大概是在1993年。 – EJP
是的,它曾經在我曾經工作過的每家公司都有過。還有我聽說過的所有使用C++的公司。 –