ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
293756 Топик полностью
sbb (22.12.2011 13:46, просмотров: 99) ответил =AlexD= на Должен был помочь, т.к. вывод из ответа только один - все определения шаблона должны быть в хедере, и выносить часть из них в отдельно компилируемый модуль нельзя. Т.е. хотелки аффтару следует поумерить.
В общем случае можно выносить, только лучше не нужно, ибо проблемно. Делал реализацию методов для шаблонов класса в MSVC в сpp. Там заморочка в том что, компилятор должен при компиляции этого cpp-файла сгенерировать в нем код методов под каждый фактический параметр шаблона. Что приводит к необходимости определять прямо в этом файле конкретные объекты для всех вариантов параметров шаблона. Если реализация определена в хидере, то это происходит автоматически при компиляции первого же файла, где встречается определение объекта по шаблону с конкретным параметром. Вспомним, что при компиляции каждого отдельного cpp файла есть информация только из включенных заголовочных файлов, но ничего нет из других отдельно собираемых cpp файлов (например, нет реализации шаблонной функции, если она описана в другом cpp).