Как использовать явную реализацию шаблона, чтобы сократить время компиляции?
Было предложено использовать явную реализацию шаблона для сокращения времени компиляции. Мне интересно, как это сделать. Например
// a.h
template<typename T> class A {...};
template class A<int>; // explicit template instantiation to reduce compilation time
Но в каждом переводчике, который включен, кажется, A<int>
будет скомпилировано. Время компиляции не уменьшается. Как использовать явную реализацию шаблона, чтобы сократить время компиляции?
2 ответа
Решение
Если вы знаете, что ваш шаблон будет использоваться только для определенных типов, давайте назовем их T1,T2, вы можете переместить реализацию в исходный файл, как обычные классы.
//foo.hpp
template<typename T>
struct Foo {
void f();
};
//foo.cpp
template<typename T>
void Foo<T>::f() {}
template class Foo<T1>;
template class Foo<T2>;
Объявите экземпляр в заголовке:
extern template class A<int>;
и определите его в одном исходном файле:
template class A<int>;
Теперь он будет создан только один раз, а не в каждой единице перевода, что может ускорить процесс.