Schauen wir uns ein interessantes Konstrukt aus dem C++14-Standard an, mit dem Sie eine Struktur zurückgeben können, die an einer Stelle im Code verwendet wird, aber Sie müssen immer noch ein Objekt mit benannten Feldern zurückgeben.
Dieses Konstrukt kann als Ersatz für std::tuple dienen. In diesem Fall müssen wir keine zusätzlichen Strukturen deklarieren, die wir nirgendwohin übertragen werden, da wir nur einen Datensatz erhalten müssen, den wir sofort am Rückkehrpunkt irgendwie verwenden und nicht weiter in dieselbe Form übertragen .
Normales Funktionsbeispiel
#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-Funktionsbeispiel
Ein Beispiel mit einer Lambda-Funktion unterscheidet sich in diesem Fall nicht wesentlich von einer regulären Funktion, es wird nur ein anderer Ort für die Deklaration sein.
#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; }