Есть моменты, когда я хочу перегружать или специализировать шаблоны, которые уже были вызваны ранее из-за циклических зависимостей.
Поскольку они являются шаблонами, решение обычно состоит в том, чтобы разделить объявление и определение.
Однако, если эти шаблоны должны быть частью библиотеки #included, это означает, что вам нужно два #include:
(Удаленный C ++ экспорт Ключевое слово (до C ++ 11) было потенциальным решением, но у него было множество проблем).
У кого-нибудь есть какие-то решения, чтобы избежать необходимости второго #include?
Я рассмотрел:
Попытка создать некую единственную шаблонную функцию пересылки «late_call», которая определена в конце источника и использует некоторый механизм для вывода целевой функции из ее параметров. К сожалению, я могу видеть только, как это может работать в очень особых случаях.
Создание расширяемого списка заголовков для включения через препроцессор с последующим включением их всех в конце через один финальный #include.
Можно взломать такой список с фиксированным количеством мест, используя множество #defines.
Создание моей собственной команды pragma-type, а затем написание внешнего инструмента для запуска предварительно обработанного кода и перемещения перед компиляцией.
Создание «late.hpp», в котором я добавляю #include для каждого позднего определения, защищенное #ifdefs, чтобы проверить, нужны ли они.
В конце добавьте вручную список поздних определений заголовков.
Задача ещё не решена.
Других решений пока нет …