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

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

Войти
Регистрация
Восстановить пароль
 
Highcore
Сообщений: n/a
#1

Постопределение возвращаемого функцией типа - C++

12.04.2014, 20:41. Просмотров 209. Ответов 3
Метки нет (Все метки)

Суть проблемы: есть метод без аргументов, который в зависимости от флага должен возвращать либо тип T1, либо тип T2. Собственно, реализуемо ли такое? Если да - то как?

Пытался сделать так:
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
template <class Type1, class Type2>
class Pair
{
private:
    void* pF;
    void* pS;
    Type1 val1;
    Type2 val1;
    bool bSwap;
public:
    Pair() {bSwap = false;}
    Pair(Type1 newVal1, Type2 newVal2)
    {
        bSwap = false;
        val1 = newVal1;
        val2 = newVal2;
        pF = (Type1*)&val1;
        pS = (Type2*)&val2;
    }
    auto GetFirst() -> decltype(!bSwap? val1 : val2)
    {
        return !bSwap? *(Type1*)pF : *(Type2*)pF;
    }
};
Теперь знаю, что decltype возвращает возможное значение выражения, не вычисляя его, так что мой ошметок кода не компилируется.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2014, 20:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Постопределение возвращаемого функцией типа (C++):

Назначение возвращаемого значения функцией - C++
Уважаемые форумчане, помогите пожалуйста ответить на пару тройку вопросов:wall: 1.Поясните назначение возвращаемого значения функцией....

По ссылке на функцию получить тип возвращаемого этой функцией значения - C++
Существует задача следующего характера. Шаблон класса параметризуется ссылкой на функцию. Необходимо, чтобы один из членов класса имел тип,...

Может ли третий проверка возвращаемого функцией значения влиять на результат линковки? - C++
Не торопитесь с ответом. Я тоже так думал. Кропаем dll: //dllka.cpp #include &lt;unknwn.h&gt; void f(){ //Размер взят от...

Получение типа возвращаемого методом значения - C++
Есть некий класс, в классе есть метод возвращающий значение типа T. Можно ли как-то получить это самое T? Пробовал decltype, он требует...

Оператор без типа возвращаемого значения - C++
operator int (); //Тут не указывается возвращаемый тип но есть оператор return; Вот: operator int () { return fe; }

Определение типа возвращаемого значения лямбда-выражения - C++
Вообщем не совсем понимаю в каких случаях надо использовать замыкающий тип возвращаемого выражения. У липпмана написано что данный пример...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
12.04.2014, 20:58 #2
Вот тут нюансы работы с decltype, может поможет разобраться: pdf

Добавлено через 1 минуту
А вот тут: decltype с тернарным оператором я чем то подобным тоже интересовался.
DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
12.04.2014, 23:42 #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Highcore Посмотреть сообщение
в зависимости от флага должен возвращать либо тип T1, либо тип T2
Значение возвращаемое вычисляется на этапе компиляции (не важно через decltype или еще как). А твой флаг - это этап исполнения. То есть либо флаг должен быть константой времени компиляции, либо нужно использовать какой-нибудь вариантный тип. Типа boost::variant или boost::any.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
13.04.2014, 11:59 #4
Цитата Сообщение от Highcore Посмотреть сообщение
от флага должен возвращать либо тип T1, либо тип T2.
Если типы связаны единой иерархией, то можно задать возвращаемый тип указателем (ссылкой) на базовый класс и в зависимости от условий возвращать разные объекты. См. паттерн "виртуальный конструктор" например.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2014, 11:59
Привет! Вот еще темы с ответами:

Использование int или void в качестве возвращаемого типа для main() - C++
Когда использовать int main, а когда void main?

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

Почему тип входящего параметра функции может отличаться от типа возвращаемого значения? - C++
Зачем здесь указываеться другой тип данных: double &amp;change_it(int i); Весь код: using namespace std; double...

Ошибка "конструкторы не разрешены для возвращаемого типа" - C++
Создаю класс: class main_ { public: main_(); ~main_(); } за классом пишу: main_::main_() {


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.04.2014, 11:59
Ответ Создать тему
Опции темы

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