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

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

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

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

12.04.2014, 20:41. Просмотров 203. Ответов 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++
Уважаемые форумчане, помогите пожалуйста ответить на пару тройку вопросов:wall: 1.Поясните назначение возвращаемого значения функцией....

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

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

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

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

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

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

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

В чем разница между Си'шным приведением типа и унарной шаблонной функцией static_cast? - C++
В чем разница между Си'шным приведением типа: ... int x{5}; ifs.write( (char*)&amp;x, sizeof(int) ); ... и унарной шаблонной...

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


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

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

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

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