Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Highcore
1

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

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

Author24 — интернет-сервис помощи студентам
Суть проблемы: есть метод без аргументов, который в зависимости от флага должен возвращать либо тип 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2014, 20:41
Ответы с готовыми решениями:

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

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

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

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

3
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
12.04.2014, 20:58 2
Вот тут нюансы работы с decltype, может поможет разобраться: pdf

Добавлено через 1 минуту
А вот тут: decltype с тернарным оператором я чем то подобным тоже интересовался.
0
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
12.04.2014, 23:42 3
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Highcore Посмотреть сообщение
в зависимости от флага должен возвращать либо тип T1, либо тип T2
Значение возвращаемое вычисляется на этапе компиляции (не важно через decltype или еще как). А твой флаг - это этап исполнения. То есть либо флаг должен быть константой времени компиляции, либо нужно использовать какой-нибудь вариантный тип. Типа boost::variant или boost::any.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
13.04.2014, 11:59 4
Цитата Сообщение от Highcore Посмотреть сообщение
от флага должен возвращать либо тип T1, либо тип T2.
Если типы связаны единой иерархией, то можно задать возвращаемый тип указателем (ссылкой) на базовый класс и в зависимости от условий возвращать разные объекты. См. паттерн "виртуальный конструктор" например.
0
13.04.2014, 11:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2014, 11:59
Помогаю со студенческими работами здесь

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

Как проблему возвращаемого типа в функции
Предупреждение C4183 sinus1: отсутствие возвращаемого типа; предполагается функция-член,...

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

Decltype при определении возвращаемого типа в перегруженных операторах шаблонного класса
Для всех следующих примеров будет использован main(): #include &lt;iostream&gt; int main() {...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru