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++
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
- Björn Hendriks (15.04.2009 15:41)
- Michael Karcher (15.04.2009 14:16)
- Andreas =??B?SMO8bm5lYmVjaw==?= (15.04.2009 14:34)
- Rolf Magnus (15.04.2009 20:31)
- Christian Seifert (15.04.2009 23:35)
- Olaf Krzikalla (16.04.2009 15:45)
- James (16.04.2009 10:10)
- Christian Seifert (21.04.2009 16:16)
- Christian Seifert (21.04.2009 22:28)
- James (22.04.2009 10:28)
- Thomas Thiele (04.05.2009 12:46)
