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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
#1

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

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2014, 12:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблон принимает аргументы с различными типами (C++):

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

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

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

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

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

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

8
Croessmah
Эксперт CЭксперт С++
13413 / 7564 / 855
Регистрация: 27.09.2012
Сообщений: 18,618
Записей в блоге: 3
Завершенные тесты: 1
13.03.2014, 12:26 #2
Цитата Сообщение от Игорюня Посмотреть сообщение
то компилятор пишет про неоднозначность параметров
потому что 3.1124 - это double, а 20 - int
Цитата Сообщение от Игорюня Посмотреть сообщение
Можно исправить как-нибудь?
использовать один тип
1
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
13.03.2014, 12:27  [ТС] #3
Вообще компилятор позволяет проводить сравнение различных числовых типов?
0
Croessmah
Эксперт CЭксперт С++
13413 / 7564 / 855
Регистрация: 27.09.2012
Сообщений: 18,618
Записей в блоге: 3
Завершенные тесты: 1
13.03.2014, 12:29 #4
Цитата Сообщение от Игорюня Посмотреть сообщение
Вообще компилятор позволяет проводить сравнение различных числовых типов?
если знает как это сделать
1
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
13.03.2014, 12:37 #5
Видимо, ты хотел на каждый тип по шаблону..
C++
1
template <class T, class U>
1
Croessmah
Эксперт CЭксперт С++
13413 / 7564 / 855
Регистрация: 27.09.2012
Сообщений: 18,618
Записей в блоге: 3
Завершенные тесты: 1
13.03.2014, 12:48 #6
Цитата Сообщение от castaway Посмотреть сообщение
Видимо, ты хотел на каждый тип по шаблону..
а возвращаемое значение какого типа будет?
0
DrOffset
7313 / 4413 / 999
Регистрация: 30.01.2014
Сообщений: 7,246
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
Croessmah
Эксперт CЭксперт С++
13413 / 7564 / 855
Регистрация: 27.09.2012
Сообщений: 18,618
Записей в блоге: 3
Завершенные тесты: 1
13.03.2014, 12:54 #8
Цитата Сообщение от DrOffset Посмотреть сообщение
через SFINAE, просто более многословно.
это этапе компиляции, а тут, я так понял, нужно на этапе выполнения будет
1
DrOffset
7313 / 4413 / 999
Регистрация: 30.01.2014
Сообщений: 7,246
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2014, 13:05
Привет! Вот еще темы с ответами:

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

шаблон функции который принимает в параметры массив количиство елементов и должен найти сумму елементов массив - C++
шаблон функции который принимает в параметры массив количиство елементов и должен найти сумму елементов массива

Аргументы функции: что значит "большие" и "небольшие" аргументы? - C++
Здравствуйте! Всем доброго дня! Растолкуйте пожалуйста! Что значит большие и небольшие?

Проверяю, являются ли 4 строки стихом. "й" принимает за "и", тем самым принимает за слог - C++
Суть программы: банальная проверка на то, являются ли 4 строки стишком. Метод решения задачи: равное кол-во слогов и одинаковые последние...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
13.03.2014, 13:05
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru