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

Возвращаемое значение - C++

Восстановить пароль Регистрация
 
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
26.10.2012, 21:17     Возвращаемое значение #1
Как сделать так, что бы в зависимости от подаваемых аргументов, функция возвращала разные значения?
Пробовал через шаблоны, но не получилось.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2012, 21:17     Возвращаемое значение
Посмотрите здесь:

возвращаемое значение функции C++
C++ Возвращаемое значение (класс)
Возвращаемое значение функции C++
возвращаемое значение cos() C++
C++ Возвращаемое значение функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BuPy7
Нет ТЗ - давай досвидания
 Аватар для BuPy7
747 / 344 / 30
Регистрация: 01.12.2011
Сообщений: 2,027
26.10.2012, 21:21     Возвращаемое значение #2
Ваш вопрос не корректен. Попробуйте по точнее описать суть проблемы.
Если у вас например аргумент принимает тип char, и нужно, чтоб функция тоже возвращала char, то через шаблоны.
Если не получается, то залейте проект. Разберёмся. Подскажем.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
26.10.2012, 21:23     Возвращаемое значение #3
Ну через шаблоны можно решить, только чуть хитрее, чем в лоб.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <typename ParamType>
struct TReturnType
{
    typedef int TResult;
};
template <>
struct TReturnType<double>
{
    typedef string TResult;
};
 
template <typename T>
TReturnType<T>::TResult SomeFunc(T Param)
{
    TReturnType<T>::TResult some;
    return some;
}
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
26.10.2012, 21:39  [ТС]     Возвращаемое значение #4
Metallnote, пардон, немного неправильно мысль выразил.
"Что бы возвращались разные типы"

Добавлено через 5 минут
John Prick, Ваш пример делает немного не то.

Имелось ввиду: подаешь в функцию 'a' - возвращает A, где A - класс
подаешь 'b' - возвращает B
подаешь 'c' - возвращает C
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
26.10.2012, 21:50     Возвращаемое значение #5
А. Ну это фабрика типичная. В двух словах тут не объяснить.

Добавлено через 6 минут
Хотя подумал тут. Не такая уж и типичная...

Добавлено через 1 минуту
Возвращаемый функцией тип должен быть так или иначе определён на этапе компиляции. А здесь его нужно выбирать динамически. В С++ такое либо невозможно, либо я таких фокусов не знаю.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
26.10.2012, 22:00  [ТС]     Возвращаемое значение #6
John Prick, А если на этапе компиляции известны типы, которые нужно возвращать. Но как сделать отсев по если 'a' то одно, если 'b' то другое, я не знаю.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
26.10.2012, 22:08     Возвращаемое значение #7
Тут ещё другая проблема: не бывает перегрузок функции, отличающихся только типом возвращаемого значения.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
26.10.2012, 22:13     Возвращаемое значение #8
Kgfq, классы А,В и С унаследованы от одного общего класса или абсолютно различны?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
26.10.2012, 22:14     Возвращаемое значение #9
Возможно вам подойдёт вариант, когда в функцию будет передаваться доп.параметр того типа, который хотите вернуть, либо как-то его определяющий.
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
template <char C> CharToType {};
 
template <typename ParamType>
struct TReturnType
{
    typedef int TResult;
};
template <>
struct TReturnType< CharToType<'a'> >
{
    typedef A TResult;
};
 
template <>
struct TReturnType< CharToType<'b'> >
{
    typedef B TResult;
};
 
template <typename T, class C>
TReturnType<C>::TResult SomeFunc(T Param, C)
{
    TReturnType<C>::TResult some;
    return some;
}
 
void funcChoose(char C)
{
    if (C == 'a') { A a = SomeFunc(C, CharToType<'a'>) }
    else if (C == 'b') { B b = SomeFunc(C, CharToType<'b'>) }
}
Вот эта funcChoose уже вполне себе фабрика. Её можно пытаться улучшить.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
26.10.2012, 22:23  [ТС]     Возвращаемое значение #10
I.M., в том-то и дело, что различны
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2012, 22:25     Возвращаемое значение
Еще ссылки по теме:

C++ Возвращаемое значение делигата
C++ Значение, возвращаемое функцией (C++)
C++ Классы. Возвращаемое значение

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

Или воспользуйтесь поиском по форуму:
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
26.10.2012, 22:25     Возвращаемое значение #11
Kgfq, тогда это ошибка проектирования. Меняйте архитектуру пока еще есть время

Добавлено через 1 минуту
Или используйте boost::any или boost::variant
Yandex
Объявления
26.10.2012, 22:25     Возвращаемое значение
Ответ Создать тему
Опции темы

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