Информация об изменениях

Сообщение Re: Для чего шаблонной функции нужна особая сигнатура? от 23.01.2023 18:09

Изменено 23.01.2023 18:22 rg45

Re: Для чего шаблонной функции нужна особая сигнатура?
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Хотел в одной из библиотек сделать финт ушами: в заголовке оставить объявления нескольких одноименных функций с перегрузкой типов параметров, а в модуле реализовать их общим шаблоном, явно определив версии с допустимыми комбинациями параметров. По замыслу, это позволило бы линковать с ней другие библиотеки без перекомпиляции их исходников. Но оказалось, что [как минимум] VC++ дает шаблонным функциям сигнатуры, отличные от сигнатур обычных функций, и линковки таки не получается.


Какие сигнатуры дает функциям VC++ — это его личное дело, какие хочет, такие и дает. А то, что делаешь ты — это в заголовочном файле объявляешь одни функции, а в "модуле" другие. И эти последние, конечно же, не видны за пределами единицы трансляции, поскольку нигде больше не объявлены. Ты можешь вынести свои шаблонные функции в тот же заголовок и это будут просто отдельные функции. И все вместе они будут подчиняться правилам Overload resolution.

Сколько времени, ты говоришь, программируешь на C++ — 42 года, или 43? Азбуку можно было за это время постичь?
Re: Для чего шаблонной функции нужна особая сигнатура?
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Хотел в одной из библиотек сделать финт ушами: в заголовке оставить объявления нескольких одноименных функций с перегрузкой типов параметров, а в модуле реализовать их общим шаблоном, явно определив версии с допустимыми комбинациями параметров. По замыслу, это позволило бы линковать с ней другие библиотеки без перекомпиляции их исходников. Но оказалось, что [как минимум] VC++ дает шаблонным функциям сигнатуры, отличные от сигнатур обычных функций, и линковки таки не получается.




Какие сигнатуры дает функциям VC++ — это его личное дело, какие хочет, такие и дает. А то, что делаешь ты — это в заголовочном файле объявляешь одни функции, а в "модуле" другие. И эти последние, конечно же, не видны за пределами единицы трансляции, поскольку нигде больше не объявлены. Ты можешь вынести свои шаблонные функции в тот же заголовок и это будут просто отдельные функции. И все вместе они будут подчиняться правилам Overload resolution.

Сколько времени, ты говоришь, программируешь на C++ — 42 года, или 43? Азбуку можно было за это время постичь?