nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

nullptr für objekte

Von: VuuRWerK (vuurwerk@gmx.de) [Profil]
Datum: 15.04.2009 01:02
Message-ID: <31f536e9-3d2f-46fa-afed-bed5f4687ab4@v15g2000yqn.googlegroups.com>
Newsgroup: de.comp.lang.iso-c++
Hi,

der Titel ist eventuell etwas unglücklich gewählt, allerdings wollte
ich nicht meine Frage schon im Betreff formulieren :)

Problem ist folgendes: Ich suche eine Möglichkeit für eine 'art'
nullptr für objekte. Das es das von vornherein in C++ nicht gibt weiß
ich, allerdings will ich erstmal versuchen weitesgehend ohne pointer
auszukommen, nicht weil ich sie nicht mag sondern weil ich beim
Programmieren von Libs dem Nutzer sowenig Arbeit wie möglich machen
möchte (Speicher freiräumen, etc ...). Zur Zeit implementiere ich ein
Interface. Das Verhalten des Interfaces ist schon vorgeschrieben und
da gibt es sozusagen keine Möglichkeit dies zu ändern. Jetzt stehe ich
vor dem Problem dass das Interface bei einer Rückgabe eines Strings
aussagt, wenn es nicht möglich ist diesen String zu ermitteln (bspw.
einen Namen) dann soll die Methode "null" zurückgeben. Ok, das ist ja
berechtigt, wenn es etwas nicht gibt dann kann ich auch nichts
zurückgeben. Allerdings gefällt mir die Sache, einen pointer auf einen
bspw. std::wstring zurück zu geben überhaupt nicht. Denn dann kann ich
ja gleich C-Strings verwenden. Wie kann ich da jetzt aber einen weg
finden das zu umgehen? Ein Typ "null" zu definieren mag gehen, jedoch
ist es denk ich für den Nutzer ungewöhnlich immer gegen null zu
vergleichen (if (str == null))? Andere Möglichkeit: Da ich für die
Strings sowieso ein typedef habe kann ich ja auch gleich vom
std::wstring erben und dann eine Methode "is_null()" implementieren,
aber auch hier bleibt wieder die Frage nach der "useability", (if
(str.is_null()))? Dann gibts noch boost::optional (http://
www.boost.org/doc/libs/1_38_0/libs/optional/doc/html/index.html).
Jedoch ist der Zugriff auf das "interne" Objekt wie bei einem Pointer
(std::cout << *str; /* str ist ein objekt! */)), wieder sehr
gewöhnungsbedürftig, wo doch meine API am Ende beschreibt, es kommt
ein Objekt?

Wie kann ich das am besten meistern? Doch lieber die Pointer-Variante?
Das Beispiel bezieht sich im übrigen nicht ausschließlich auf strings
sondern sollte, wenn möglich, auf jeden weiteren Typ anwendbar sein.

Danke schonmal im Vorraus!

Grüße
Christian

[ Auf dieses Posting antworten ]

Antworten