Stilfrage
-
Wie ist es eigentlich am besten und am einfachsten mehrere Werte einer Funktion zurückzugeben?
-
Kommt auf den Kontext an, generell würde ich sagen als Referenz-Parameter der Funktion.
-
Weitere Möglichkeiten wären, alles in eine struct zu verpacken oder boost::tuple (~ std::pair) zu verwenden (für Rückgabewerte von verschiedenen Typen) oder einen Container wie std::vector, in bestimmten Fällen über einen std::auto_ptr, zurückzugeben (für Rückgabewerte mit gleichem Typ). Für jede Möglichkeit findet man bestimmt ein Beispiel, in der sie die schönste wäre.
(*typos fix*...)
-
Kommt auf den Kontext an, generell würde ich sagen als Referenz-Parameter der Funktion.
Kommt auf den Kontext an, *generell* würde ich sagen am Besten sind Funktionen die nur einen Wert zurückliefern. Alles andere riecht erstmal nach "die Funktion macht zuviel" oder unter Buzz-Wort-Verwendung: Die Cohesion der Funktion scheint nicht optimial.
Wenn es sich aber um konzeptionell einen Rückgabewert handelt, der aber durch zwei Werte beschrieben wird (klassisches Beispiel: Eine Sequenz, die durch zwei Iteratoren repräsentiert wird), dann scheint mir ein std::pair eine hübsche Lösung zu sein.Bei Funktionen die neben einem Ergebnis auch noch einen Status (Fehlercode) liefern, scheint mir ein out-Parameter das Beste zu sein.
-
...würde ich sagen am Besten sind Funktionen die nur einen Wert zurückliefern. Alles andere riecht erstmal nach "die Funktion macht zuviel"...
Ich hab eine Funktion die eine Position setzt: void set_pos(int x, int y);
Außerdem soll es eine Funktion get_pos geben. Ich denke nicht, dass so eine Fuktion zu viel macht.
-
Wie wäre es dann mit get_posX() und get_posY()?
Vorstellbar wäre auch sowas:
struct Pos { Pos(const unsigned X, const unsigned Y) :x(X), y(Y) {} ~Pos() {} unsigned x, y; };
Und als Rückgabetyp Pos.
edit: Jäger des verlorenen Semikolons
-
Eine Position/Punkt ist doch ideal fuer einen struct.
-
Eine Position/Punkt ist doch ideal fuer einen struct
Naja, die Formulierung hinkt ein wenig, da "struct" das selbe, wie "class" ist (nur mit anderen standardwerten für die Zugriffsrechte). Ich verwende beispielsweise struct auch immer für Funktoren.