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

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

Войти
Регистрация
Восстановить пароль
 
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
#1

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

26.10.2012, 21:17. Просмотров 654. Ответов 10
Метки нет (Все метки)

Как сделать так, что бы в зависимости от подаваемых аргументов, функция возвращала разные значения?
Пробовал через шаблоны, но не получилось.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2012, 21:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возвращаемое значение (C++):

Возвращаемое ссылочное значение - C++
int a = 1; int& func(){return a;} void main() { int b = func(); b+=111; cout << b << " " << a; system("pause"); ...

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

Возвращаемое значение (класс) - C++
class shtraf { public: struct sh { int vel; char number; sh *next; };

Возвращаемое значение из класса - C++
#include <iostream> using namespace std; class Integer { public: int value; Integer(int i) { value = i; } const...

Возвращаемое значение функции - C++
void tokenize(string str_translate){ char char_translate; strcpy(char_translate, str_translate.c_str()); // string to char* ...

Возвращаемое значение функции - C++
Здравствуйте Я тут новенький. Очень трудно у вас проходить регистрацию. У меня вопрос по С++ Компилятор: Code Blocks ...

10
BuPy7
Нет ТЗ - давай досвидания
730 / 357 / 35
Регистрация: 01.12.2011
Сообщений: 2,148
26.10.2012, 21:21 #2
Ваш вопрос не корректен. Попробуйте по точнее описать суть проблемы.
Если у вас например аргумент принимает тип char, и нужно, чтоб функция тоже возвращала char, то через шаблоны.
Если не получается, то залейте проект. Разберёмся. Подскажем.
0
John Prick
809 / 742 / 148
Регистрация: 27.07.2012
Сообщений: 2,122
Завершенные тесты: 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;
}
0
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
0
John Prick
809 / 742 / 148
Регистрация: 27.07.2012
Сообщений: 2,122
Завершенные тесты: 3
26.10.2012, 21:50 #5
А. Ну это фабрика типичная. В двух словах тут не объяснить.

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

Добавлено через 1 минуту
Возвращаемый функцией тип должен быть так или иначе определён на этапе компиляции. А здесь его нужно выбирать динамически. В С++ такое либо невозможно, либо я таких фокусов не знаю.
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
26.10.2012, 22:00  [ТС] #6
John Prick, А если на этапе компиляции известны типы, которые нужно возвращать. Но как сделать отсев по если 'a' то одно, если 'b' то другое, я не знаю.
0
John Prick
809 / 742 / 148
Регистрация: 27.07.2012
Сообщений: 2,122
Завершенные тесты: 3
26.10.2012, 22:08 #7
Тут ещё другая проблема: не бывает перегрузок функции, отличающихся только типом возвращаемого значения.
0
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
26.10.2012, 22:13 #8
Kgfq, классы А,В и С унаследованы от одного общего класса или абсолютно различны?
0
John Prick
809 / 742 / 148
Регистрация: 27.07.2012
Сообщений: 2,122
Завершенные тесты: 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 уже вполне себе фабрика. Её можно пытаться улучшить.
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
26.10.2012, 22:23  [ТС] #10
I.M., в том-то и дело, что различны
0
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
26.10.2012, 22:25 #11
Kgfq, тогда это ошибка проектирования. Меняйте архитектуру пока еще есть время

Добавлено через 1 минуту
Или используйте boost::any или boost::variant
0
26.10.2012, 22:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2012, 22:25
Привет! Вот еще темы с ответами:

Возвращаемое значение функции - C++
Добрый день. Есть функция: TextString InfoBox::name(unsigned int i) const { if(i&lt;this-&gt;count()) { TextLabel...

Возвращаемое значение метода - C++
Здравствуйте Подскажите пожалуйста что неправильно указано в в объявлении метода и возвращаемом значении (компилятор выдает...

Возвращаемое значение в class - C++
Здравствуйте можно ли как-то возвраить значение основной программе, если операцию я проводил в в class?

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


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

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

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