Как использовать явную реализацию шаблона, чтобы сократить время компиляции?

Было предложено использовать явную реализацию шаблона для сокращения времени компиляции. Мне интересно, как это сделать. Например

// 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>;

Теперь он будет создан только один раз, а не в каждой единице перевода, что может ускорить процесс.

Другие вопросы по тегам