So habe ich eine Lambda des Rückgabetyp ist, ist auto
und ich habe Probleme mit der Anordnung für ein initializer_list
sichern hier zerstört:Lebensdauerverlängerung einer initializer_list Rückkehr
const auto foo = [](const auto& a, const auto& b, const auto& c) { return {a, b, c}; };
Ich werde das Lambda verwenden wie dies:
auto bar = foo(1, 2, 3);
for(const auto& i : bar) cout << i << endl;
Ein Job, ich arbeite als Teil ihres Codierungsstandard hat, dass alle Lambdas einzelne Aussagen (fühlen sich frei, Ihre Empörung auszudrücken.) sind ich denke, dass ich dieses Problem umgehen kann:
- Geben
foo
ein Rückgabetypvector int
, aber das vermasselt, wie schön generic es ist:const auto foo = [](const auto& a, const auto& b, const auto& c) -> vector<int> { return {a, b, c}; }
- Nur eine templatized Funktion zu schreiben, die eine
vector<T>
konstruiert und gibt es:template <typename T> vector<T> foo(const T& a, const T& b, const T& c){ return {a, b, c}; }
Ist es möglich, um diese Variablen in einen Container zu zwingen, wer wird nicht alle in einer Zeile zerstört, so dass ich das Lambda mit einem auto
Rückgabetyp behalten kann?
Es ist keine 'Anfangs iizer_list', ist eine Initialisierungsliste. Zwei verschiedene Dinge. Es gibt nichts, woran man es ableiten könnte, weshalb es fehlschlägt. –
Wie packen Sie die Rückgabe in Lambda als Tupel und entpacken sie als initializer_list in einen Container? – Arunmu
Was passiert, wenn 'a',' b' und 'c' unterschiedliche Typen haben? – NathanOliver