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

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

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

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

13.03.2013, 21:01. Просмотров 482. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2013, 21:01     Шаблонная функция принимает 2 аргумента разных типов и возвращает больший из них
Посмотрите здесь:

Шаблонная функция с явной специализацией не возвращает динамический массив C++
C++ Функция, которая возвращает максимальное из двух целых чисел, полученных в качестве аргумента.
C++ Функция F1, которая не принимает и не возвращает значений, но выводит на экран любое сообщение
C++ Создайте функцию, которая принимает в качестве аргумента целое число и возвращает число Люка с таким номером
C++ Функция принимает указатель на динамический массив и возвращает его же, но без чисел полиндромов (читается с обоих сторон одинаково - 234432)
Напишите функцию, которая принимает 3 аргумента целого типа(часы, минуты и секунды) и возвращает количество секунд C++
C++ Функция приема разных типов в классе
Функция, которая на вход принимает строку и в качестве результата возвращает ее копию C++
C++ Работа с классами С++. error C2660: "Функция не принимает 2 аргумента"
C++ Ошибка при передача аргумента: "C2660: calc: функция не принимает 3 аргументов"
C++ Функция друг принимает три аргумента
C++ Перегруженная функция принимает в качестве аргумента массив

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.03.2013, 22:35     Шаблонная функция принимает 2 аргумента разных типов и возвращает больший из них #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 с одним шаблонным параметром, принимающую и возвращающую значения одинаковых типов.
pi_X_el
Заблокирован
14.03.2013, 09:23  [ТС]     Шаблонная функция принимает 2 аргумента разных типов и возвращает больший из них #3
Спасибо
-=ЮрА=-
Заблокирован
Автор FAQ
14.03.2013, 14:13     Шаблонная функция принимает 2 аргумента разных типов и возвращает больший из них #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;
}
Миниатюры
Шаблонная функция принимает 2 аргумента разных типов и возвращает больший из них  
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
14.03.2013, 17:59     Шаблонная функция принимает 2 аргумента разных типов и возвращает больший из них #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
Yandex
Объявления
14.03.2013, 17:59     Шаблонная функция принимает 2 аргумента разных типов и возвращает больший из них
Ответ Создать тему
Опции темы

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