2010-08-09 9 views
18

würde Ich mag einige visuelle Rauschen im Code zu reduzieren und shared_ptr hinter einem typedef wie dieses verstecken:Ist es gut, shared_ptr hinter einem Typedef zu verstecken?

typedef boost::shared_ptr<SomeLongClass> SomeLongClassPtr; 

So folgt aus:

void foo(const boost::shared_ptr<SomeLongClass>& a, 
     boost::shared_ptr<SomeLongClass>& b); 

wird dies:

void foo(const SomeLongClassPtr& a, SomeLongClassPtr& b); 

Auf der anderen Seite mache ich mir Sorgen, dass ich die Explicitness des Codes reduziere.

Welcher ist ein besserer Stil?

+0

Dies ist eine Art Duplikat von [Wie lautet Ihre Konvention für typedefing shared_ptr?] (Http://stackoverflow.com/questions/2717436/whats-your-convention-for-typedefing-shared-ptr) –

+0

@James, Danke, ich habe diese Frage nicht selbst gefunden. –

+0

BitteUseUnderScoresInsteadOfCapitalizingTheFirstLettersBecauseThisIsHardToRead – Inverse

Antwort

12

Da std :: string selbst ein Typdef ist, denke ich, dass es dir gut geht. Ich mache es selber.

Sogar Scott Meyers empfiehlt typedef für das Lesen von Code in Fällen wie Ihnen.


EDIT: Effective C++, zweite Auflage, Seite 120, Artikel 28, Absatz. "... stellen typedefs bereit, die die Notwendigkeit entfernen ..."

Effektiveres C++, Siebdruck, Seite 237, Artikel 31 erster Absatz.

Effektiver C++, siebter Druck, Seite 238, Artikel 31 Erster Absatz nach Codebeispiel.


Im Wesentlichen keine Sorgen. :-)

+0

Ich hätte gerne einen Hinweis von Scott Meyers, aber inzwischen nehme ich dein Wort dafür. –

+0

@Alex, siehe oben bearbeiten. :-) – JustBoo

9

Wir verwenden TypePtr typedefs in unserem Code für shared_ptr<Type> Objekte. Es ist auch nützlich, eine TypeConstPtr für shared_ptr<const Type> zu haben.

+2

Dito. Wenn es Lesbarkeit und Wartbarkeit verbessert, kann es kaum eine schlechte Sache sein. –

1

Sie könnten den Typdef 'SomeLongClassSharedPtr' nennen, der sowohl explizit als auch einfach zu schreiben ist.

Eine negative Konsequenz aus dieser Vorgehensweise ist, dass einige Autovervollständigungsimplementierungen (z. B. in Eclipse CDT) nicht ausgeführt werden. Das hat mich jedoch nicht davon abgehalten, es zu benutzen.

1

Ich bin etwas gegen typedefs, die verbergen, ob Dinge echte Zeiger (oder Referenzen) sind, zu viel unlesbaren C-Code, der dies tut, gesehen haben. Aber wenn ich eine Kasuistik anwende, denke ich, dass shared_ptrs keine echten Zeiger sind und der Typdef OK ist. Aber Sie verlieren Informationen - Sie können nicht mehr nur sagen, indem Sie die Funktionsdeklaration (oder Definition!) Betrachten, was ihre Semantik ist.

+0

Und lassen Sie mich raten, Sie sind absolut dagegen, ein "p" davor zu setzen. Das würde die Ungarische Notation treffen und das können wir sicher nicht haben! Ich bevorzuge Pragmatismus gegenüber der Herdenmentalität. Und nein, ich benutze oder billige HN nicht. Ich werde jedoch gelegentlich ein "p" vor einen Zeigernamen setzen. – JustBoo

+0

@JustBoo Ich wurde nie beschuldigt, der Herde vorher zu folgen, aber ich nehme an, dass es für alles ein erstes Mal gibt. Und ich benutze eine sehr begrenzte für die ungarische selbst - alle meine Mitgliedsvariablen sind mit einem 'm' vorangestellt. –

+0

@Neil: Na dann gut. :-D tu ich auch. http://stackoverflow.com/questions/3461697/cstring-variable-name-prefix/3461766#3461766 mit dem gelegentlichen "p" gekoppelt und das ist es. – JustBoo

Verwandte Themen