Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
20 / 16 / 11
Регистрация: 07.12.2013
Сообщений: 244
1

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

13.03.2014, 12:24. Показов 566. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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); то компилятор пишет про неоднозначность параметров.Можно исправить как-нибудь?Вообще компилятор позволяет проводить сравнение различных числовых типов?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2014, 12:24
Ответы с готовыми решениями:

Реализовать программу-калькулятор, работающий с различными типами данных
Реализовать программу-калькулятор, работающий с различными типами данных на языке с++

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

Функция не принимает аргументы
Не знаю какой участок кода выделить, напишу всю программу Программа выводит выбор продукта,...

Функция rand не принимает аргументы
Добрый день, при написании программы у меня возникла такая проблема :&quot;error C2660: rand: функция не...

8
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
13.03.2014, 12:26 2
Цитата Сообщение от Игорюня Посмотреть сообщение
то компилятор пишет про неоднозначность параметров
потому что 3.1124 - это double, а 20 - int
Цитата Сообщение от Игорюня Посмотреть сообщение
Можно исправить как-нибудь?
использовать один тип
1
20 / 16 / 11
Регистрация: 07.12.2013
Сообщений: 244
13.03.2014, 12:27  [ТС] 3
Вообще компилятор позволяет проводить сравнение различных числовых типов?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
13.03.2014, 12:29 4
Цитата Сообщение от Игорюня Посмотреть сообщение
Вообще компилятор позволяет проводить сравнение различных числовых типов?
если знает как это сделать
1
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
13.03.2014, 12:37 5
Видимо, ты хотел на каждый тип по шаблону..
C++
1
template <class T, class U>
1
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
13.03.2014, 12:48 6
Цитата Сообщение от castaway Посмотреть сообщение
Видимо, ты хотел на каждый тип по шаблону..
а возвращаемое значение какого типа будет?
0
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
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;
}
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
13.03.2014, 12:54 8
Цитата Сообщение от DrOffset Посмотреть сообщение
через SFINAE, просто более многословно.
это этапе компиляции, а тут, я так понял, нужно на этапе выполнения будет
1
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
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);
Типа того.
0
13.03.2014, 13:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2014, 13:05
Помогаю со студенческими работами здесь

Почему шаблонный параметр-шаблон не принимает другие параметры шаблона
Т.е. нельзя вместо template &lt;typename T, template &lt;typename _Ty, class _Aloc = allocator&lt;_Ty&gt; &gt;...

Напишите шаблон класса односвязного списка, который принимает элементы любого типа
Ребята, помогите. Надо решить следующую задачу: Напишите шаблон класса односвязного списка,...

Шаблон принимает два типовых параметра. Если параметры - одни и те же типы, вернуть true
Помогите с задачей. Реализовать простой шаблон SameType. Этот шаблон не содержит никаких методов,...

Таблица с различными типами данных
Здравствуйте. Получил я задачу вывести таблицу с возможностью ее сортировки по нескольким...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru