Multiple Rückgabewerte in multiple Variablen schreiben?
-
Im Prinzip tu ich das ja.
Und Python liefert auch nur ein Tupel zurück.
Was ich eigentlich meinte, ob man es in C++ umsetzen kann, ist das "Auspacken" eines Tupels in Variablen.
-
Nein.
-
Hat sich schon erledigt!
Boost kann es
http://www.boost.org/doc/libs/1_37_0/libs/tuple/doc/tuple_users_guide.html
A tuple that contains non-const references as elements can be used to 'unpack' another tuple into variables. E.g.:
int i; char c; double d; tie(i, c, d) = make_tuple(1,'a', 5.5); std::cout << i << " " << c << " " << d;
-
Jopp, boost::tie ist kuhl

Funktioniert netterweise auch mit std::pair zusammen, d.h. man kann's auch mit map::insert und Ähnlichem verwenden.
-
hustbaer schrieb:
Jopp, boost::tie ist kuhl

cool?
-
Vollhonk schrieb:
hustbaer schrieb:
Jopp, boost::tie ist kuhl

cool?
Cool

-
FreakY<3Cpp schrieb:
Vollhonk schrieb:
hustbaer schrieb:
Jopp, boost::tie ist kuhl

cool?
Cool

Genau!
"Kuhl" ist nämlich die kuhlere Schreibweise von "cool"!
NDR und so
-
Warum nicht einfach die "Rückgabewerte" in Form von Referenzen als Parameter übergeben?
-
@Fellhuhn:
Hat er doch geschrieben
Lonsuder schrieb:
Ich finde ein Rückgabewert sollte ein Rückgabewert sein und nicht ein Parameter, wo die Funktion dann reinschreibt.
-
Naja, mit "Ich finde..." kann man viel fordern.

Gibt man halt zurück ob das erfolgreich war oder nicht.
-
Fellhuhn schrieb:
Naja, mit "Ich finde..." kann man viel fordern.

Gibt man halt zurück ob das erfolgreich war oder nicht.
Das sehe ich aber auch so wie Lonsuder. Wenn Du Referenzen übergibt, kannst Du zB kein const mehr benutzen:
pair<Iter,Iter> const range = std::equal_range(...); // ^^^^^Alternativ:
Iter a, b; // <-- ohne const mein_equal_range(....,a,b); // referenzen übergebenGut, mit
tiekommt's eigentlich auf das gleiche hinaus, aber wenigestens habe ich beim Aufrufen noch die Wahl:Iter a, b; tie(a,b) = std::equal_range(...);In einer idealen Welt könnten wir Definition und Initialisierung ein einem Schritt machen. Aber dafür müsste die Sprache wahrscheinlich Tuple direkt unterstützen.
Tuple ist übrigens Teil der kommenden Standardbibliothek. Es gibt nicht nur make_tuple und tie, sondern auch ein pack_arguments. Mir fällt nur keine sinvolle Anwendung für pack_arguments im Moment ein.
-
Wenn es etwas gibt auf das ich verzichten kann, dann auf const.

-
Fellhuhn schrieb:
Wenn es etwas gibt auf das ich verzichten kann, dann auf const.

War ja auch nur ein Beispiel. Das andere, stört mich etwas mehr: Dass Du erst ein Objekt im "null-Zustand" erzeugen musst, was dann verändert wird. Dazu müsste eine Klasse auch einen Defaultkonstruktor haben.
Hier noch ein Zitat von David Abrahams -- vielleicht hat das etwas mehr gewicht.
As functional programmers like to remind us, mutation makes code more complex to reason about by undermining referential transparency and equational reasoning.
aus seinem Blog.
Aber am Ende ist es hauptsächlich eine Geschmacksfrage.