Verständnisfrage zu Namespaces
-
Hallo,
ich habe mich bereits ein wenig in C++ eingearbeitet, verstehe aber so einiges nicht im Zusammenhang mit der Library SFML, die ich in mein Programm einbinden möchte. Ein Codeauszug aus einem Beispielprogramm von SFML:
1) sf::Event event; while (window.pollEvent(event)) { 2) if (event.type == sf::Event::Closed) window.close(); }
-
sf ist offensichtlich ein Namespace, Event eine Klasse darin und event die im Programm verwendete Instanz. Soweit richtig?
-
Diese Zeile verstehe ich nicht. Was bedeutet dieses doppelte :: ? Ist Event ein Unternamespace von sf? Und was ist dann Closed?
-
-
Ja, sf ist der Namespace, Event eine Klasse in diesem Namespace. und event ist dann eine Instanz dieser Klasse.
:: ist der Zugehörigkeitsoperator. Closed gehört zur Klasse Event, und Event gehört zum Namespace sf. Closed ist wahrscheinlich ein Flag eines Enums.
-
Schau dir die Doku dazu an: sf::Event Class Reference
Unter "Public Types" findest du "enum EventType", welches u.a. "Closed" enthält.Mittels "::" greift man in C++ sowohl auf Namensbereiche als auch auf Untertypen zu.
-
Ja, Closed ist tatsächlich ein enum. So langsam dämmert es bei mir, mit Namespaces hatte ich nämlich noch nicht viel im Sinn. Nur mal zur Kontrolle:
Wenn jetzt in der Event-Klasse eine Variable vom Typ dieses Enums enthalten wäre, dann müsste der Zugriff darauf doch wie gewohnt über den Punktseparator erfolgen, oder?
-
distagon35 schrieb:
Wenn jetzt in der Event-Klasse eine Variable vom Typ dieses Enums enthalten wäre, dann müsste der Zugriff darauf doch wie gewohnt über den Punktseparator erfolgen, oder?
Wenn du eine Instanzvariable meinst, ja.
-
Der Schleier ist gefallen. Ich habe in einem Beispielprogramm gefunden, dass auch eine Methode mit Doppeldoppelpunkt aufgerufen wird. In der Doku fand ich dann, dass diese Methoe statisch deklariert ist, und statische Methoden beziehen sich, soviel ich weiß, nicht auf Instanzen, sondern auf die Klasse, und werden eben mit :: angepingelt. Klasse - Instanz - da liegt wohl die Erklärung.
Danke für eure Hilfe. Ich werde mich bestimmt noch mal melden.
Gruß distagon35