Ich habe in letzter Zeit häufig festgestellt, dass Typedefs für eine bestimmte Klasse innerhalb dieser Klasse relevant sind, d. H.
class Lorem
{
typedef boost::shared_ptr<Lorem> ptr;
typedef std::vector<Lorem::ptr> vector;
//
// ...
//
};
Diese Typen werden dann an anderer Stelle im Code verwendet:
Lorem::vector lorems;
Lorem::ptr lorem( new Lorem() );
lorems.push_back( lorem );
Gründe, warum es mir gefällt:
- Es reduziert das durch die Klassenvorlagen verursachte Rauschen,
std::vector<Lorem>
wirdLorem::vector
usw. - Es dient als Absichtserklärung - im obigen Beispiel soll die Lorem-Klasse als Referenz gezählt
boost::shared_ptr
und in einem Vektor gespeichert werden. - Es ermöglicht eine Änderung der Implementierung - dh wenn Lorem geändert werden
boost::intrusive_ptr
müsste, um zu einem späteren Zeitpunkt aufdringlich referenziert zu werden (via ), hätte dies nur minimale Auswirkungen auf den Code. - Ich denke, es sieht "hübscher" aus und ist wohl leichter zu lesen.
Gründe, warum ich es nicht mag:
- Es gibt manchmal Probleme mit Abhängigkeiten - wenn Sie beispielsweise eine
Lorem::vector
in eine andere Klasse einbetten möchten, aber nur Lorem deklarieren müssen (oder wollen) (anstatt eine Abhängigkeit von der Header-Datei einzuführen), müssen Sie am Ende die verwenden explizite Typen (zBboost::shared_ptr<Lorem>
stattLorem::ptr
), was etwas inkonsistent ist. - Es kann nicht sehr häufig und daher schwerer zu verstehen sein?
Ich versuche, mit meinem Codierungsstil objektiv umzugehen, daher wäre es gut, andere Meinungen dazu einzuholen, damit ich mein Denken ein wenig analysieren kann.