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

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

Восстановить пароль Регистрация
 
Highcore
Сообщений: n/a
12.04.2014, 20:41     Постопределение возвращаемого функцией типа #1
Суть проблемы: есть метод без аргументов, который в зависимости от флага должен возвращать либо тип 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)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
12.04.2014, 20:58     Постопределение возвращаемого функцией типа #2
Вот тут нюансы работы с decltype, может поможет разобраться: pdf

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

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