Существуют ли общие рекомендации или обходные пути для организации или перераспределения шаблонных определений элементов между несколькими файлами?
Да; нет.
Спецификация C ++ позволяет компилятору «видеть» весь шаблон (объявление и определение) в точке его создания, и (из-за сложности любой реализации) большинство компиляторов сохраняют это требование. В результате #inclusion любого заголовка шаблона также должна #include включать любой источник, необходимый для создания экземпляра шаблона.
Самый простой способ справиться с этим - выгрузить все в заголовок, встроенный там, где это возможно, и вне строки, где это необходимо.
Если вы действительно рассматриваете это как неприемлемое оскорбление, распространенным вариантом является разделение шаблона на обычную пару заголовок / реализация, а затем #include файл реализации в конце заголовка.
Функция "экспорта" в C ++ может предоставлять или не предоставлять другой обходной путь. Функция плохо поддерживается и плохо определена; хотя в принципе это должно разрешать какую-то отдельную компиляцию шаблонов, это не обязательно устраняет требование, чтобы компилятор мог видеть все тело шаблона.