Мне нравится использовать умные указатели, и я видел немного кода, в котором хорошо используются typedef
, которые делают их красивее. Например:
struct A {
typedef boost::shared_ptr<A> pointer;
};
позволяет мне написать: A::pointer a(new A);
Но я попал в небольшую загадку в моем typedef
счастье: - /, жду деклараций ...
Представьте себе такой сценарий:
struct B;
struct A {
boost::shared_ptr<B> b_;
};
struct B {
boost::shared_ptr<A> a_;
};
работает достаточно хорошо, но я бы с удовольствием это почистил. К сожалению, это не работает
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_;
};
Я понимаю, почему в этот момент в файле у компилятора нет информации, что B фактически имеет тип с именем pointer
.
У меня такое чувство, что я застрял, используя старый подход, по крайней мере, для некоторых вещей, но я бы хотел услышать некоторые умные идеи.