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

Шаблон функции с разным возвращаемым типом - C++

Восстановить пароль Регистрация
 
Tawiskaron
Сообщений: n/a
16.12.2011, 19:09     Шаблон функции с разным возвращаемым типом #1
Доброго времени суток!
Возникла необходимость написать шаблон функции, которая будет возвращать значение, тип которого отличен от типа передаваемых параметров.
Конкретнее -- функция деления двух чисел.
Для параметров типа int возвращаемый тип должен быть float, а для типа long int -- double.
Подтолкните в нужном направлении, пожалуйста -)

Добавлено через 10 минут
Update
Я понимаю, что начать надо как-то так:


C++
1
2
3
4
5
template <typename T1, typename T2>
T2 division(T1 a, T1 b)
{
    return static_cast<T2>(a / b);
}
но как поставить соответствие между T1 и T2?
Или вообще все надо не так делать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2011, 19:09     Шаблон функции с разным возвращаемым типом
Посмотрите здесь:

C++ Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива
Функции с произвольным количеством и типом аргументов. C++
C++ Ссылки на объекты в функции с не заданным типом переменных
Виртуальные функции с одинаковым именем и разным набором аргументов C++
Шаблон функции сортировки массива структур по разным типам полей C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
htonasral
5 / 5 / 1
Регистрация: 19.05.2009
Сообщений: 23
16.12.2011, 19:10     Шаблон функции с разным возвращаемым типом #2
C++
1
2
3
4
5
6
7
8
9
10
11
float IntToFloat(int a, int b)
{
    if(b != 0)
    {
        float i = a;
        float j = b;
        return i / j;
    }
    else
        exit(1);
}
Ну на сколько я понял, то дело должно обстоять так, со стандартными типами.
На счет того что каким шаблоном заменить думай сам.
Tawiskaron
Сообщений: n/a
16.12.2011, 19:20     Шаблон функции с разным возвращаемым типом #3
Цитата Сообщение от htonasral Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
float IntToFloat(int a, int b)
{
    if(b != 0)
    {
        float i = a;
        float j = b;
        return i / j;
    }
    else
        exit(1);
}
Ну на сколько я понял, то дело должно обстоять так, со стандартными типами.
На счет того что каким шаблоном заменить думай сам.
Увы, до этого я и сам могу додуматься. Меня интересует именно вопрос реализации шаблона.
LosAngeles
Заблокирован
16.12.2011, 19:27     Шаблон функции с разным возвращаемым типом #4
это свойство продвижения типов promotion type traits, в книге джосатиса и вандервурда - шаблоны С++ справочник разработчика, оно подробно описано
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
16.12.2011, 19:29     Шаблон функции с разным возвращаемым типом #5
Tawiskaron,
C++
1
2
3
4
5
6
7
8
9
10
11
12
template<class T, class T2>
T2 division(const T& first, const T& second);
 
template<>
float division<int, float>(const int& first, const int& second)
{
}
 
template<>
double division<long int, double>(const long int& first, const long int& second)
{
}
м?
htonasral
5 / 5 / 1
Регистрация: 19.05.2009
Сообщений: 23
16.12.2011, 19:30     Шаблон функции с разным возвращаемым типом #6
Ну исходя из моего примера выше можно сделать вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
template <typename T1, typename T2>
T2 division(T1 a, T1 b)
{
    if(b != 0)
    {
        T2 i = a;
        T2 j = b;
        return i / j;
    }
    else
        exit(1);
}
Ну и использовать вот так:
C++
1
division<int, float>(3, 5);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2011, 20:12     Шаблон функции с разным возвращаемым типом
Еще ссылки по теме:

C++ Как искать функции, работающие с определенным типом?
Функции с типом но без имени параметра C++
C++ Вычисление кубического корня с использованием функции с параметрами и возвращаемым значением

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

Или воспользуйтесь поиском по форуму:
LosAngeles
Заблокирован
16.12.2011, 20:12     Шаблон функции с разным возвращаемым типом #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
template <bool b, typename T1, typename T2> struct ifTrueThenFirst;
 
template <typename T1, typename T2> struct ifTrueThenFirst<true, T1, T2>
{
    typedef T1 ResultT;
};
 
template <typename T1, typename T2> struct ifTrueThenFirst<false, T1, T2>
{
    typedef T2 ResultT;
};
 
template <typename T1, typename T2> struct Promotion
{
    typedef typename ifTrueThenFirst< (  sizeof(T1) > sizeof(T2)  ), T1, T2  >::ResultT ResultT; 
};
 
 
 
 
template <typename T1, typename T2>
typename Promotion<T1, T2>::ResultT division(T1 a, T2 b)
{
    return a / b;
}
 
int main()
{
    float f = 435;
    double d = 45645;
    float f2 = division(f, d);
 
    return 0;
}
вот пример применения свойства продвижения, можно специализировать Promotion для некоторых типов, а по умолчанию будет выбран тип с наибольшим размером
Yandex
Объявления
16.12.2011, 20:12     Шаблон функции с разным возвращаемым типом
Ответ Создать тему
Опции темы

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