Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

04.09.2009, 23:43

Frage zu Funktionsdeklaration (S. 224, Singletons)

Guten Abend,

ich verstehe im Moment die Zeile Nr. 27 in Listing 8.6 zum Thema Singletons nicht. Es handelt sich um die Kopfzeile einer Funktionsdeklaration:

C-/C++-Quelltext

1
2
 inline static T* Get () 
{bla}


T ist der Platzhalter aus dem Template, das Schlüsselwort "inline" ist klar, und Get() ebenfalls.
Ich weiß im Moment nicht, was "static" und der Sternchen-Operator hier bedeuten, und außerdem sehe ich hier irgendwie keinen Rückgabetyp? Oder bin ich einfach nur abendlich blind und verwirrt?
Für eure Hilfe schon im Vorhinein vielen Dank!
PPretzel

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

2

05.09.2009, 00:30

Das kann am Anfang natürlich etwas verwirrend sein.

Der Rückgabewert ist das was zwischen den Schlüsselwörtern (inline static) und dem Funktionsnamen (Get) steht. Also in diesem Fall: T*. Wobei der Rückgabewert dann natürlich vom Templateparameter abhängt, und das * dahinter anzeigt, dass es sich um einen Zeiger vom Typ T handelt.

Das Schlüsselwort static bewirkt, dass die Funktion als Klassenfunktion verfügbar ist. D.h. du kannst sie aufrufen ohne eine Instanz der Klasse erstellen zu müssen.

Normale Funktionen:
MeineKlasse instanz;
instanz.MachWas();

Klassenfunktionen:
MeineKlasse::MachWas();

static dürfte aber sicherlich im Buch auch erklärt werden, am besten du liest dort nochmal nach.

3

05.09.2009, 00:32

T ist ein Typ, T* ein Zeiger auf diesen Typ.
Wenn du als Templateparameter also int einsetzt, gibt die Funktion einen Zeiger auf ein int zurück. Also ein int*.
Das static heißt, das die Funktion keine nicht statischen Variablen der Klasse benutzen kann, man die Funktion dafür aber aufrufen kann, ohne ein Objekt der Funktion zu haben. Prinzipiell das selbe wie eine normale Funktion in einem Namensraum der genauso heißt, wie die Funktion.
Lieber dumm fragen, als dumm bleiben!

4

05.09.2009, 00:36

Ok, vielen Dank euch beiden für die Hilfe! Jetzt ist alles soweit klar, glaub ich ;)

Werbeanzeige