Надо сделать CPP-файл, в которые перенести как можно больше кода из программы. И код производят:
• Static- и глобальные переменные.
• Нешаблонные, не-inline-функции.
• Не-inline, полностью расшаблоненные функции
template<>
.
• Не-extern объявление шаблона типа
template class std::vector<int>
.
Мало того, эти четыре вещи ошибочно держать в хедерах — но этого, как ни странно, в нашей библиотеке и нет, ведь она полностью полагается на шаблоны. Но есть пара резервов.
1. Функция в теле класса автоматически становится inline, и, я бы сказал, что-нибудь типа
AsynchronousReader::init
было бы ошибкой держать inline’ом. По-хорошему, его надо в CPP. Но это довольно небольшая часть кода.
2. Можно также наиболее распространённые версии классов/функций залить в SO. Для этого их надо вынести из тел классов и поступить примерно так.
// H
template <int x>
void foo () { std::cout << x << std::endl; }
extern template void foo<2>();
// CPP
template void foo<2>();