C++14 - unnamed structure as auto value returned by function

C++, C++14, auto, lambda

Let's look at an interesting construction from the C++14 standard, which allows you to return the structure used in one place of the code, but you need to return an object with named fields.

Such a construction can serve as a replacement for std::tuple. At the same time, we will not need to declare any additional structures that we are not going to transfer anywhere, since we need to get only a set of data that we will somehow use immediately at the place of return and will not transfer further in the same form.

Normal function example

#include <iostream>
#include <string>

using namespace std;

// Declare a function that will return auto
auto getHero()
{
    // We will form an unnamed structure of the return value
    struct
    {
    std::string name;
    std::string surname;
    int age;
    } result { "James", "Bond", 42 }; // Initially initialize the structure object
    return result; // Then you can return the resulting structure, the compiler will do everything thanks to auto
}

int main()
{
    // We return this value immediately to the auto variable
    auto hero = getHero();
    // And we can already use this object, while it will have named fields
    std::cout << hero.surname << "..." << hero.name << " " << hero.surname << " " << hero.age << std::endl;
    return 0;
}

Lambda function example

The example with the lambda function will not differ much in this case from the usual function, there will simply be a different place for the declaration.

#include <iostream>
#include <string>

using namespace std;

int main()
{
    // Declare a lamda function that will return auto
    auto getHero = []()
    {
        // We will form an unnamed structure of the return value
        struct
        {
        std::string name;
        std::string surname;
        int age;
        } result { "James", "Bond", 42 }; // Initially initialize the structure object
        return result; // Then you can return the resulting structure, the compiler will do everything thanks to auto
    };

    // We return this value immediately to the auto variable
    auto hero = getHero();
    // And we can already use this object, while it will have named fields
    std::cout << hero.surname << "..." << hero.name << " " << hero.surname << " " << hero.age << std::endl;
    return 0;
}

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
- company blog
Support the author Donate

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Donate

Hello, Dear Users of EVILEG!!!

If the site helped you, then support the development of the site financially, please.

You can do it by following ways:

Thank you, Evgenii Legotckoi

BM
Jan. 25, 2020, 1:16 p.m.
Bekzod Muminov

C++ - Test 001. The first program and data types

  • Result:53points,
  • Rating points-4
BM
Jan. 25, 2020, 1:04 p.m.
Bekzod Muminov

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:20points,
  • Rating points-10
BM
Jan. 25, 2020, 12:52 p.m.
Bekzod Muminov

C++ - Тест 003. Условия и циклы

  • Result:42points,
  • Rating points-8
Last comments
Jan. 27, 2020, 1:01 a.m.
Ruslan Polupan

Да так, посмотрел библиотеку попробовал примеры...
s
Jan. 26, 2020, 2:51 p.m.
shame

Чего не webassembly?
Jan. 21, 2020, 2:12 p.m.
Docent

Полезная статья. Как всегда - то что надо. Добавлю ещё маленькую полезность - после установки tracer (88 строка) и перед выводом значений в lineEdit (91 строка) стоит добавить updatePositio…
Jan. 17, 2020, 2:31 a.m.
Andrej Jankovich

Выглядит как ошибка библиотеки. Расскажите подробно на какой платформе вы собираете проект (MinGW или MSVC) их версии и версии Qt.
D
Jan. 16, 2020, 12:06 p.m.
DENIZ1819

Доброго времени суток, не подскажите, что делать в данной ситуации, после того, как я сделал все вышеуказанные инструкции для подключения библиотеки к проекту?
Now discuss on the forum
Jan. 27, 2020, 3:17 a.m.
Il'ja Chichak

а почему бы не сделать одну модель, например Attachement со всеми этими полями, и в зависимости от действия пользователя, например, "добавить документ", "добавить картинку" и т.д. класть все это…
E
Jan. 26, 2020, 11:42 a.m.
Edi

Другого способа, как получать перезагруженный контент через JavaScript на странице, я не знаю. Получилось сделать без QWebEngineView, с помощью QWebEnginePage, runJavaScrip…
E
Jan. 26, 2020, 11:14 a.m.
Edi

Да, я не понял до конца того, как это работает, мало опыта работы с qt и QVAriant ни разу не использовал. Спасибо за помощь)
VZ
Jan. 26, 2020, 4:11 a.m.
Vladimir Zhitkovsky

Да, спасибо порешалось таким образом: удаление одного for(int i = 0; i < lstData.count(); ++i){ auto *data= dynamic_cast<Data*>(lstData[i]); if(data) { if(…
Jan. 14, 2020, 9:04 a.m.
Ruslan Volshebnik

Проблема осталась. Но я выснил, что это происходит когда файл достигает максимального размера.
EVILEG
About
Services
© EVILEG 2015-2019
Recommend hosting TIMEWEB