Из-за циклических зависимостей вы используете предварительные объявления для некоторых классов:
//B.h
class A;
class B
{
public:
void foo(A* a);
};
typedef SmartPtr<B> BPtr;
//A.h
class B;
class A
{
public:
void foo(B* b);
};
typedef SmartPtr<A> APtr;
Теперь, скажем, я хочу изменить прототипы функций для использования умных указателей:
void A::foo(BPtr b);
void B::foo(APtr a);
Очевидно, я не могу форвард объявить APtr
или BPtr
.Что работает, так это повторное использование typedef
:
//B.h
class A;
typedef SmartPtr<A> APtr;
class B
{
public:
void foo(APtr a);
};
typedef SmartPtr<A> APtr;
//A.h
class B;
typedef SmartPtr<B> BPtr;
class A
{
public:
void foo(BPtr b);
};
typedef SmartPtr<A> APtr;
, но я не уверен, что это правильное решение.Есть ли стандартный способ сделать это?Что я сделал не так или опасно?