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

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

Изменено 23.01.2023 5:57 so5team

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

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


Простите, но как было сказано в другой теме, без примеров кода однозначно понять что же вам нужно бывает затруднительно. Вы говорите вот о такой ситуации:

// dummy.hpp-файл.
#pragma once

void dummy(char, unsigned int);
void dummy(unsigned int, float);
void dummy(float, unsigned long);

// dummy.cpp файл.
#include <dummy>

template<typename A, typename B>
void dummy_impl(A a, B b) {...}

void dummy(char a, unsigned int b) { dummy_impl(a, b); }
void dummy(unsigned int a, float b) { dummy_impl(a, b); }
void dummy(float a, unsigned long b) { dummy_impl(a, b); }


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

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


Простите, но как было сказано в другой теме, без примеров кода однозначно понять что же вам нужно бывает затруднительно. Вы говорите вот о такой ситуации:

// dummy.hpp-файл.
#pragma once

void dummy(char, unsigned int);
void dummy(unsigned int, float);
void dummy(float, unsigned long);

// dummy.cpp файл.
#include "dummy.hpp"

template<typename A, typename B>
void dummy_impl(A a, B b) {...}

void dummy(char a, unsigned int b) { dummy_impl(a, b); }
void dummy(unsigned int a, float b) { dummy_impl(a, b); }
void dummy(float a, unsigned long b) { dummy_impl(a, b); }


?