例:それは意志、私のプロジェクトで頻繁に使用されているようになどのstd ::ベクトル、のstd ::ベクトルとしてのベクトルの少数の例として、プリコンパイル済みヘッダーのテンプレートをインスタンス化すると、コンパイル時間が短縮されますか?
#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++を使用しているすべての企業。 –