Форум программистов, компьютерный форум CyberForum.ru

Шаблон принимает аргументы с различными типами - C++

Восстановить пароль Регистрация
 
Игорюня
 Аватар для Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
13.03.2014, 12:24     Шаблон принимает аргументы с различными типами #1
C++
1
2
3
4
5
6
template <class T>
T function(T a,T b)
{
    if(a>b)return a;
    else return b;
}
Если я делаю вызов с различными типами function(3.1124,20); то компилятор пишет про неоднозначность параметров.Можно исправить как-нибудь?Вообще компилятор позволяет проводить сравнение различных числовых типов?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,913
Записей в блоге: 2
Завершенные тесты: 1
13.03.2014, 12:26     Шаблон принимает аргументы с различными типами #2
Цитата Сообщение от Игорюня Посмотреть сообщение
то компилятор пишет про неоднозначность параметров
потому что 3.1124 - это double, а 20 - int
Цитата Сообщение от Игорюня Посмотреть сообщение
Можно исправить как-нибудь?
использовать один тип
Игорюня
 Аватар для Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
13.03.2014, 12:27  [ТС]     Шаблон принимает аргументы с различными типами #3
Вообще компилятор позволяет проводить сравнение различных числовых типов?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,913
Записей в блоге: 2
Завершенные тесты: 1
13.03.2014, 12:29     Шаблон принимает аргументы с различными типами #4
Цитата Сообщение от Игорюня Посмотреть сообщение
Вообще компилятор позволяет проводить сравнение различных числовых типов?
если знает как это сделать
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
13.03.2014, 12:37     Шаблон принимает аргументы с различными типами #5
Видимо, ты хотел на каждый тип по шаблону..
C++
1
template <class T, class U>
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,913
Записей в блоге: 2
Завершенные тесты: 1
13.03.2014, 12:48     Шаблон принимает аргументы с различными типами #6
Цитата Сообщение от castaway Посмотреть сообщение
Видимо, ты хотел на каждый тип по шаблону..
а возвращаемое значение какого типа будет?
DrOffset
6458 / 3832 / 885
Регистрация: 30.01.2014
Сообщений: 6,628
13.03.2014, 12:53     Шаблон принимает аргументы с различными типами #7
Цитата Сообщение от Croessmah Посмотреть сообщение
а возвращаемое значение какого типа будет?
Например такого В С++03 это тож можно сделать, через SFINAE, просто более многословно.
C++
1
2
3
4
5
template <typename A, typename B>
auto foo(A const & a, B const & b) -> decltype(a + b)
{
    return a + b;
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,913
Записей в блоге: 2
Завершенные тесты: 1
13.03.2014, 12:54     Шаблон принимает аргументы с различными типами #8
Цитата Сообщение от DrOffset Посмотреть сообщение
через SFINAE, просто более многословно.
это этапе компиляции, а тут, я так понял, нужно на этапе выполнения будет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2014, 13:05     Шаблон принимает аргументы с различными типами
Еще ссылки по теме:

C++ Напишите шаблон класса односвязного списка, который принимает элементы любого типа
шаблон функции который принимает в параметры массив количиство елементов и должен найти сумму елементов массив C++
Шаблон принимает два типовых параметра. Если параметры - одни и те же типы, вернуть true C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DrOffset
6458 / 3832 / 885
Регистрация: 30.01.2014
Сообщений: 6,628
13.03.2014, 13:05     Шаблон принимает аргументы с различными типами #9
Croessmah, не, этапе компиляции всегда (предыдущий пример тоже). Для встроенных типов он работает на основе правил определенных в стандарте для преобразований.
Например, если рассмотреть пример с делением:
decltype(a / b)
Будет int, если оба аргумента int.
Будет double, если один из аргументов double (или оба).
Для пользовательских типов будет просто определятся тип результата operator+.
Как-то так.

Добавлено через 2 минуты
Croessmah, а, извини, я понял. Ты про пример ТС говорил. Там да, тип результата от динамики зависит. Вариантные типы и (или) полиморфизм спасут в этом случае.

Добавлено через 1 минуту
C++
1
2
template <typename A, typename B>
boost::variant<A, B> foo(A const a, B const & b);
Типа того.
Yandex
Объявления
13.03.2014, 13:05     Шаблон принимает аргументы с различными типами
Ответ Создать тему
Опции темы

Текущее время: 11:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru