интеллектуальные указатели, определения типов и форвардные объявления

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

У меня такое чувство, что я застрял в использовании старого подхода, по крайней мере, для некоторых вещей, но я хотел бы услышать несколько умных идей.

13
задан Evan Teran 16 June 2011 в 19:57
поделиться