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

Сообщение Re: концепты? от 27.01.2023 16:42

Изменено 27.01.2023 16:43 Sm0ke

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

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


ЕМ>Какой в этом может быть смысл? Чем функция с определенными типами параметров и результата, реализованная через шаблон, в плане линковки отличается от функции с теми же типами, но без шаблона?


template <typename T, typename ... V>
concept c_any_of = ( std::is_same_v<T, V> || ... );

template <c_any_of<int, double> T>
void func(T number) {}


Это поможет? Тут лишь 20-ый стандарт
концепты
Re: концепты?
Здравствуйте, Евгений Музыченко, Вы писали:

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


ЕМ>Какой в этом может быть смысл? Чем функция с определенными типами параметров и результата, реализованная через шаблон, в плане линковки отличается от функции с теми же типами, но без шаблона?


template <typename T, typename ... V>
concept c_any_of = ( std::is_same_v<T, V> || ... );

template <c_any_of<int, double> T>
void func(T number) {}


Это поможет? Тут лишь 20-ый стандарт