Мне нравится использовать умные указатели, и я видел небольшой код, который хорошо использует 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 на самом деле имеет тип с именем указатель
.
У меня такое чувство, что я застрял в использовании старого подхода, по крайней мере, для некоторых вещей, но я хотел бы услышать несколько умных идей.