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