Вроде бы я нашел решение даного вопроса :
в модулях где происходит вызов конкретной функции нужно ее объявить , тогда все скомпилируется без проблем :
template <class T>
void F(T* );
естественно, это не получится слинковать , тк линкер не найдет реализации функций , поэтому в самом конце модуля шаблонов нужно дать явные указания компилятору по каждой функции, типа :
template void F<int*>(int *);
Конечно, это кривой метод, но он мог бы быть полезен когда в проекте больше одного модуля и реализация многих шаблонов занимает больше 500-700 байт ( ну или кб кому сколько важно
)) , вот только MS пишет :
When a function template is first called for each type, the compiler creates an instantiation. Each instantiation is a version of the templated function specialized for the type. This instantiation will be called every time the function is used for the type. If you have several identical instantiations, even in different modules, only one copy of the instantiation will end up in the executable file.
Т.е. если я это правильно понял, можно с теми же результатами оптимизации воспользоваться:
Так сделать нельзя, код шаблонной функции должен быть виден на этапе компиляции, поэтому все шаблонные функции должны быть в .h файлах
Файл можно рабить не несколько, и инклудить их
С другой стороны по размеру obj файлов видно , что компилятор генерит в каждом модуле реализацию шаблона,
и у меня есть сомнения, в том что линкер вырезает одинаковый код из разных модулей перед сборкой их в один exe файл.
В общем, есть у кого опыт сборки больших проектов с шаблонами
Или мне предется уточнить свои сомнения посредством SoftICE/IDA ?