In-class definierte Klasse vorab deklarieren
-
Ad aCTa schrieb:
Damit es zu keinen Namenskonflikten im globalen Gültigkeitsbreich kommt
Das Problem sollte mit Namensräumen relativ schnell beseitigt sein.
Man kann auch lokale
detail-Namensräume für implementierungsspezifische Konstrukte schaffen, die werden wohl nicht aus Versehen ausgeleert.
-
Nexus schrieb:
Man kann auch lokale
detail-Namensräume für implementierungsspezifische Konstrukte schaffen, die werden wohl nicht aus Versehen ausgeleert.Was sind denn
detail-Namensräume? Konnte das Stichwort im Stroustrup nicht finden.
-
ingobulla schrieb:
Was sind denn
detail-Namensräume? Konnte das Stichwort im Stroustrup nicht finden."namespace detail", und darauf hoffen das kein Anwender sich daran vergreift...
-
Nexus schrieb:
Man kann auch lokale
detail-Namensräume für implementierungsspezifische Konstrukte schaffen, die werden wohl nicht aus Versehen ausgeleert.Das wird aber eher bei Templateprogrammierung benutzt, wo man in C++ zum Teil keine andere Möglichkeit hat, Implementierungsdeteils zu "verstecken".
ingobulla schrieb:
Was sind denn
detail-Namensräume? Konnte das Stichwort im Stroustrup nicht finden.Solltest Du irgendwann mal Boost benutzen, guck es Dir mal genauer an. Da wird
detailoft als Namensraum benutzt. Erfahrungsgemäß vergreift man sich aber auch recht oft daran. :p
-
Nexus schrieb:
...
Man kann auch lokaledetail-Namensräume für implementierungsspezifische Konstrukte schaffen, die werden wohl nicht aus Versehen ausgeleert.Da frage ich auchnochmal nach:
- "detail" ist aber kein keyword sondern eher eine Konvetion, oder?
- wie "leert man Namensräume aus" (oder Konstrukte?) ?Gruß,
Simon2.
-
- "detail" ist aber kein keyword sondern eher eine Konvetion, oder?
Ja, eher eine Konvention.
Simon
-
- wie "leert man Namensräume aus" (oder Konstrukte?) ?
using namespace xxx;Das hast du aber gewusst, oder?

-
Das hast du aber gewusst, oder?
Nein, habe nicht geuwsst das man dem so (ausleeren) sagt.
Simon
-
theta schrieb:
Das hast du aber gewusst, oder?
Nein, habe nicht geuwsst das man dem so (ausleeren) sagt.
War wohl eher der zweite Simon gemeint.

Ich hab dem einfach Ausleeren gesagt, weil man die Bezeichner im Namespace nicht mehr kategorisiert hat, sondern auf einen globalen Haufen wirft. So schubladen-mässig.
Ja,
detailist ja nur eine von vielen Möglichkeiten, vielleicht nicht immer die ideale. Oft kann man auch verschachtelte Klassen oder nur Vorwärtsdeklarationen für PIMPL einsetzen...Zu dem Missbrauch von
detail-Namensräumen: Sorry, aber das kann man dem Bibliotheks-Entwickler nicht vorwerfen. Genauso wenig, wie man ihm#define private publicauf Seiten des Anwenders anlasten kann.
-
ingobulla schrieb:
pumuckl schrieb:
Wozu bräuchtest du das?
Ich habe in der Header-Datei eine Funktion, die einen Parameter vom Typ "Zeiger auf B" hat.
Dann includiere doch einfach in die Headerdatei die den Pointer benutzen soll den Header der A::B definiert.
(Ja, ich weiß dass das eventuell nicht geht. Aber wenn hier nicht das vollständige Problem gezeigt wird, kann es auch keiner lösen. Am Besten mit dem üblichen: minimaler Code, der das Problem noch beinhaltet.)