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

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

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

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

12.04.2014, 20:41. Просмотров 195. Ответов 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++ Назначение возвращаемого значения функцией
Ошибка "конструкторы не разрешены для возвращаемого типа" C++
Можно ли вернуть функцией два значения при условии что она будет вещественного типа? C++
Тип возвращаемого значения C++
По ссылке на функцию получить тип возвращаемого этой функцией значения C++
Могут ли быть указаны квалификаторы типа в качестве возвращаемого значения функции/метода? C++
C++ Почему тип входящего параметра функции может отличаться от типа возвращаемого значения?
C++ Определение типа возвращаемого значения лямбда-выражения
Оператор без типа возвращаемого значения C++
C++ Использование int или void в качестве возвращаемого типа для main()
В чем разница между Си'шным приведением типа и унарной шаблонной функцией static_cast? C++

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

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

Добавлено через 1 минуту
А вот тут: decltype с тернарным оператором я чем то подобным тоже интересовался.
DrOffset
6841 / 4052 / 924
Регистрация: 30.01.2014
Сообщений: 6,855
12.04.2014, 23:42     Постопределение возвращаемого функцией типа #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Highcore Посмотреть сообщение
в зависимости от флага должен возвращать либо тип T1, либо тип T2
Значение возвращаемое вычисляется на этапе компиляции (не важно через decltype или еще как). А твой флаг - это этап исполнения. То есть либо флаг должен быть константой времени компиляции, либо нужно использовать какой-нибудь вариантный тип. Типа boost::variant или boost::any.
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
13.04.2014, 11:59     Постопределение возвращаемого функцией типа #4
Цитата Сообщение от Highcore Посмотреть сообщение
от флага должен возвращать либо тип T1, либо тип T2.
Если типы связаны единой иерархией, то можно задать возвращаемый тип указателем (ссылкой) на базовый класс и в зависимости от условий возвращать разные объекты. См. паттерн "виртуальный конструктор" например.
Yandex
Объявления
13.04.2014, 11:59     Постопределение возвращаемого функцией типа
Ответ Создать тему
Опции темы

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