Me encanta usar punteros inteligentes, y he visto un poco de código que hace un buen uso de typedef
s hacen que sean más bonitos. Por ejemplo:punteros inteligentes, typedefs y declaraciones directas
struct A {
typedef boost::shared_ptr<A> pointer;
};
me permite escribir: A::pointer a(new A);
Pero he con un obstáculo de menor importancia en mi typedef
felicidad: - /, declaraciones adelantadas ...
así que imagina este escenario:
struct B;
struct A {
boost::shared_ptr<B> b_;
};
struct B {
boost::shared_ptr<A> a_;
};
funciona bastante bien, pero me encantaría limpiar eso un poco. Por desgracia, esto es no funciona
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_;
};
entiendo por qué, en ese punto en el archivo, el compilador no tiene información de que B, de hecho, tiene un tipo en ella el nombre pointer
.
Tengo la sensación de que estoy atascado usando el viejo enfoque al menos para algunas cosas, pero me encantaría escuchar algunas ideas inteligentes.
De acuerdo, solo deje un comentario que el resto del código debe usar B :: puntero, ya que los tipos serán equivalentes – totowtwo