Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
1

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

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

Как сделать так, что бы в зависимости от подаваемых аргументов, функция возвращала разные значения?
Пробовал через шаблоны, но не получилось.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2012, 21:17
Ответы с готовыми решениями:

Классы. Возвращаемое значение
Всем привет:) Помогите исправить ошибки template <class T> class Vector { private: T ...

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

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

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

10
Нет ТЗ - давай досвидания
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
26.10.2012, 21:21 2
Ваш вопрос не корректен. Попробуйте по точнее описать суть проблемы.
Если у вас например аргумент принимает тип char, и нужно, чтоб функция тоже возвращала char, то через шаблоны.
Если не получается, то залейте проект. Разберёмся. Подскажем.
0
978 / 868 / 303
Регистрация: 27.07.2012
Сообщений: 2,421
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
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
26.10.2012, 21:39  [ТС] 4
Metallnote, пардон, немного неправильно мысль выразил.
"Что бы возвращались разные типы"

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

Имелось ввиду: подаешь в функцию 'a' - возвращает A, где A - класс
подаешь 'b' - возвращает B
подаешь 'c' - возвращает C
0
978 / 868 / 303
Регистрация: 27.07.2012
Сообщений: 2,421
26.10.2012, 21:50 5
А. Ну это фабрика типичная. В двух словах тут не объяснить.

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

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

Добавлено через 1 минуту
Или используйте boost::any или boost::variant
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2012, 22:25

Возвращаемое значение делигата
Сделал делигат, который принимает до 4-х аргументов функции, которая принимает любой из типой для...

Возвращаемое значение функции
array&amp; array::operator = (const array &amp;q) { if (this != &amp;q) { delete s; s=new int;...

Template возвращаемое значение
функция принимает различные типы и делает с ними операцию. И не известно какой тип она должна...

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru