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

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

Войти
Регистрация
Восстановить пароль
 
pi_X_el
Заблокирован
#1

Шаблонная функция принимает 2 аргумента разных типов и возвращает больший из них - C++

13.03.2013, 21:01. Просмотров 574. Ответов 4
Метки нет (Все метки)

Не могу сообразить как ее правильно написать. Функция может возвратить или T1 или T2

C++
1
2
3
4
5
6
template <typename T1, typename T2>
? GetMax(const T1 &a, const T2 &b)
{
    if (a>b) return a;
    else return b;
}
Добавлено через 21 минуту
вот кое-что придумал с дополнительным параметром

C++
1
2
3
4
5
template <typename T1, typename T2, typename T>
T GetMax(const T1 a, const T2 b, T)
{
    return ((a>b) ? (a) : (b));
}
и ее вызов
C++
1
2
3
4
5
    int     i=17;
    double  d=20.5;
 
    std::cout << GetMax(i, d, d) << std::endl; // результат double
    std::cout << GetMax(i, d, i) << std::endl;  // а здесь int
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2013, 21:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблонная функция принимает 2 аргумента разных типов и возвращает больший из них (C++):

Шаблонная функция с явной специализацией не возвращает динамический массив - C++
Здравствуйте! Возникла проблема! Есть шаблонная функция с явной специализацией для строк (тип char*), которая должна возвратить...

Напишите функцию, которая принимает 3 аргумента целого типа(часы, минуты и секунды) и возвращает количество секунд - C++
5. Напишите функцию, которая принимает 3 аргумента целого типа(часы, минуты и секунды) и возвращает количество секунд, прошедших со...

Функция друг принимает три аргумента - C++
Когда функция друг принимает два аргумента, проблем нет, как только появляется третий, &quot;Error: отсутствуют экземпляры перегруженная функция...

Перегруженная функция принимает в качестве аргумента массив - C++
Напишите перегруженную функцию max5() для типов int и double, которая принимает в качестве аргумента массив из пяти элементов типа N и...

Создайте функцию, которая принимает в качестве аргумента целое число и возвращает число Люка с таким номером - C++
1. Создайте функцию, которая принимает в качестве аргумента целое число и возвращает число Люка с таким номером. Воспользуйтесь...

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

4
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.03.2013, 22:35 #2
Лучше тогда уж
C++
1
2
3
4
5
6
7
template <class A, class B, class C>
A max(const B &v1, const C &v2)
{
    return (v1 > v2) ? v1 : v2;
}
 
int x = max<int>(a, b);
А вообще лучше всё же соблюдать асимметричность отношений порядка и использовать max с одним шаблонным параметром, принимающую и возвращающую значения одинаковых типов.
1
pi_X_el
Заблокирован
14.03.2013, 09:23  [ТС] #3
Спасибо
0
-=ЮрА=-
Заблокирован
Автор FAQ
14.03.2013, 14:13 #4
pi_X_el, я бы сделал сравнение на вывод булевого результата, а уж там бы выводил
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
template <class T1, class T2>
bool TemplCmp(T1 a, T2 b)
{
    return a > b;
}
 
int main()
{
    int    a = 5;
    double b = 3.5;
    cout<<"a = "<<a<<endl;
    cout<<"b = "<<b<<endl;
    cout<<"max from a and b : "
        <<(TemplCmp(a, b) ? a : b)
        <<endl;
    return 0;
}
1
Миниатюры
Шаблонная функция принимает 2 аргумента разных типов и возвращает больший из них  
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
14.03.2013, 17:59 #5
А я бы использовал С++11...

C++
1
2
3
4
5
template<typename T, typename U>
auto max(const T& t, const U& u) -> typename std::decay<decltype(t > u ? t : u)>::type
{
   return t > u ? t : u;
}
http://liveworkspace.org/code/vWuex$3
2
14.03.2013, 17:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2013, 17:59
Привет! Вот еще темы с ответами:

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

Функция, которая возвращает максимальное из двух целых чисел, полученных в качестве аргумента. - C++
Дана матрица размера M х N. Вывести ее элементы в следующем порядке: первая строка слева направо, вторая строка справа налево, третья...

Функция приема разных типов в классе - C++
Сразу скажу что надо. Есть функция pow(), так вот она принимает разные типы данных. У меня класс хочу сделать тоже самое. Подскажите как, я...

Работа с классами С++. error C2660: "Функция не принимает 2 аргумента" - C++
Пытаюсь разобраться с классами. Не компилируется код, естественно ошибки) Так как работаю впервые то не знаю как исправить подскажите что...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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