Я работаю с базой кодов, где не могу решить эту циклическую зависимость:
foo.h
class Foo
{
public:
using Ptr = std::shared_ptr<Foo>;
using ConstPtr = std::shared_ptr<const Foo>;
void setter(const Bar::Ptr& bar_ptr) {};
private:
Bar::WeakPtr bar_ptr_;
};
и
bar.h
class Bar
{
public:
using Ptr = std::shared_ptr<Bar>;
using ConstPtr = std::shared_ptr<const Bar>;
using WeakPtr = std::weak_ptr<Bar>;
Bar(Foo::ConstPtr foo_ptr) : foo_ptr_(std::move(foo_ptr)) {};
private:
Foo::ConstPtr foo_ptr_;
};
Ранее он компилировался, поскольку существовал внешний заголовок, в котором:
using FooPtr = std::shared_ptr<Foo>;
using FooConstPtr = std::shared_ptr<const Foo>;
using BarPtr = std::shared_ptr<Bar>;
Но поскольку требуется согласованность, я бы хотел получить Foo::Ptr
, Foo::ConstPtr
, Bar::Ptr
. Есть ли шанс, что я смогу его получить?
Coliru
РЕДАКТИРОВАТЬ: добавил Bar::WeakPtr
, который ранее отсутствовал, так как я думал, что у меня уже были проблемы.