170 похожих чатов

Подскажите, как такое возможно? Ведь функции не могут отличаться только

по return type:

template<typename T>
T add( double a, double b ) {
return static_cast<T>( a + b );
}

Если например будет два вызова функции, где T будет float и int

16 ответов

12 просмотров

возвращаемый тип не участвует в процессе разрешения перегрузки, но вызвать-то ты ее можешь: auto r1 = add<int>(10., 20.); auto r2 = add<double>(4., 5.);

Дмитрий-Сергеев Автор вопроса
Anatoly Shirokov
возвращаемый тип не участвует в процессе разрешени...

Хм. Выходит будут сгенерированы вот такие функции: int add( double, double ); float add( double, double ); Это наверное работает только для фундаментальных типов?

Дмитрий Сергеев
Хм. Выходит будут сгенерированы вот такие функции:...

для любым типов, почему для фундаментальных только?

Дмитрий-Сергеев Автор вопроса
Anatoly Shirokov
для любым типов, почему для фундаментальных только...

Не пойму, как могут быть функции с одинаковыми названиями и типами аргументов, но разными возвращаемыми типами. Вроде же такое нельзя делать, ведь компилятор не смотрит на возвращаемый тип при перегрузки функций (а больше ничем другим функции не отличаются)

Дмитрий Сергеев
Не пойму, как могут быть функции с одинаковыми наз...

в данном случае вы имеете дело с полными специализациями функции, а для них все однозначно, вы указываете аргументы шаблона явно, поэтому у компилятора нет вопроса какую специализацию вызвать

Дмитрий Сергеев
Не пойму, как могут быть функции с одинаковыми наз...

Шаблонные типы вообще не обязаны участвовать ни в return type ни в параметрах. Функция может быть и такой template<class UpdateStage> void update() например

Дмитрий-Сергеев Автор вопроса
Anatoly Shirokov
в данном случае вы имеете дело с полными специализ...

Понял, спасибо! А частичная специализация так не умеет, да? Как здесь например: template <> void add<int>(double, double); template <> void add<double>(double, double);

Дмитрий-Сергеев Автор вопроса
Eyed Shovel
Это не частичная специализация

Я написал псевдо-код, вот реальный пример: template <typename T> inline typename std::enable_if<std::is_same<T, int>::value, void>::type add(double, double); template <typename T> inline typename std::enable_if<std::is_same<T, double>::value, void>::type add(double, double); Выглядит конечно офигеть как странно, но может быть сработает? :)

Это не функция, а шаблон функции

Дмитрий Сергеев
Я написал псевдо-код, вот реальный пример: templa...

2. Что бы это ни было, это всё ещё не частичная специализация

И да, в этом примере это не просто стилистическая поправка - если вы обратитесь к разделу стандарта defns вы узнаете, что для шаблона функции возвращаемое значение является частью сигнатуры (то есть допустима даже перегрузка по возвращаемому значению)

Дмитрий-Сергеев Автор вопроса
Eyed Shovel
2. Что бы это ни было, это всё ещё не частичная сп...

Интересно почему это не частичная специализация? Вроде специализация и вроде частичная. Или что-то упускаю?

Дмитрий Сергеев
Интересно почему это не частичная специализация? В...

Частичная специализация это: template <typename T, typename R> class A {}; template <typename T> class A<T, int> {}; Частичной специализации функций вообще нет

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта