由於循環依賴的,您可以使用前置聲明對於某些類:是否使用兩個相同的typedef不好,以及如何避免它?
//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;
,但我不知道這是否是正確的解決方案。有沒有這樣做的標準方式?我做錯了還是危險?
我其實確實想到了這一點,但我認爲存在另一種方式。 – 2012-01-27 13:33:53
你可能在其他方面確實存在。但最好的解決方案往往是最簡單的。 – 2012-01-27 13:38:33