Определения функции члена полной специализации шаблона класса в отдельных TU - PullRequest
0 голосов
/ 24 февраля 2020

Учитывая шаблон класса, который компилируется слишком долго. Во время разработки и отладки я хочу сократить время компиляции, разделив определения функций-членов на отдельные блоки перевода. Только для единственной полной специализации (это также ради сокращения времени компиляции).

Возможно ли в C ++ разделить определения функций членов полной специализации шаблона класса, поместив их в отдельные TU?

template<> void A<smth>::f() или void A<smth>::f() ничего не дает в попытке . Я не могу победить ошибку времени ссылки.

Создание явных объявлений (например, extern template class...) шаблона класса видимым (или невидимым) (в сочетании с удалением void A<smth>::f()) в TU, где определены функции-члены , тоже ничего не дает.

1 Ответ

1 голос
/ 24 февраля 2020

Ваш синтаксис для явной реализации неправильный (вы объявляете специализацию, которая не определена), это должно быть:

template<typename T>
void A<T>::g()
{
    std::cout << __PRETTY_FUNCTION__ << std::endl;
}

template void A<int>::g();
template void A<short>::g();

Демо

...