Beispiel: sagen, dass ich in meiner vorkompilierte Header-Datei:Wird die Instanziierung von Vorlagen in vorkompilierten Headern die Kompilierzeit reduzieren?
#include <vector>
Als wenige Fälle des Vektors, wie std :: vector, std :: vector usw. werden oft in meinem Projekt verwenden, wird es reduce kompilieren Zeit, wenn ich sie auch in der precomiled Header wie folgt instanziiert:
#include <vector>
template class std::vector<float>;
template class std::vector<int>;
weiter gehen, wird es sinnvoll, auch Dummy-Funktionen auf die vorkompilierte Header hinzufügen, die einige Funktionen verwendet:
namespace pch_detail {
inline auto func() {
auto&& v = std::vector<float>{};
v.size();
v.begin();
v.front();
}
}
Ich bin mir sehr unsicher, wie Übersetzungseinheiten und Templates wirklich funktionieren, daher scheint es mir, wenn ich sie in den vorkompilierten Headern instanziiere, dass sie nicht für jede CPP-Datei instanziiert werden müssen.
aktualisieren
auf einer realen Code-Basis Getestet mit Visual Studio 2017 und einigen Umschreibungen Template-Klassen verwendet.
- Mit gemeinsamer Templat Klasse instanziiert: 71731 ms
- Ohne Instanziierung: 68544 ms
daher zumindest in meinem Fall dauerte es dauerte etwas mehr Zeit.
Ist Zeit wirklich ein Problem, das Sie lösen müssen kompilieren? Das letzte Mal, dass ich so ein Problem hatte, war ungefähr 1993. – EJP
Ja, es ist, und es war in jeder Firma, in der ich jemals gearbeitet habe. Und auch jede Firma, die C++ benutzt, von der ich schon gehört habe. –