Ich liebe die Verwendung von intelligenten Zeigern und habe ein wenig Code gesehen, der die folgenden Möglichkeiten gut nutzt typedef
s machen sie hübscher. Zum Beispiel:
struct A {
typedef boost::shared_ptr<A> pointer;
};
erlaubt mir zu schreiben: A::pointer a(new A);
Aber ich bin auf ein kleines Hindernis in meinem typedef
Glück :-/, Vorwärts-Erklärungen...
Stellen Sie sich also folgendes Szenario vor:
struct B;
struct A {
boost::shared_ptr<B> b_;
};
struct B {
boost::shared_ptr<A> a_;
};
funktioniert gut genug, aber ich würde das gerne ein wenig aufräumen. Leider ist das Funktioniert nicht
struct B;
struct A {
typedef boost::shared_ptr<A> pointer;
B::pointer b_; // <-- error here
};
struct B {
typedef boost::shared_ptr<B> pointer;
A::pointer a_;
};
Ich verstehe, warum der Compiler an dieser Stelle in der Datei keine Informationen darüber hat, dass B tatsächlich einen Typ namens pointer
.
Ich habe das Gefühl, dass ich zumindest für einige Dinge den alten Ansatz beibehalten muss, aber ich würde mich freuen, wenn ich einige clevere Ideen hören würde.