2012-04-25 52 views
1
template <class T=A> 
struct B { 
    T a; 
}; 

struct A { 
    B<A> foo(){ 
     B<A> result; 
     return result; 
    } 
}; 

如何避免必須使用模板(介意默認參數以查看其用法)。 問題是兩個類都需要對方的定義。但是模板解決方案所顯示的沒有「真正的」循環依賴。需要定義時避免循環類相關性

+1

編譯罰款,我在2005年DevStudio的不要忘記該模板在使用時不是在聲明時被實例化。 – Skizz 2012-04-25 09:39:53

+0

是的,上面的工作確實奏效。 刪除模板是不行的。 – arithma 2012-04-25 09:56:03

回答

3

你可以利用一個事實,即向前聲明的情況下,你的價值迴歸(如與A::foo的情況下)足夠:

struct B; 

struct A { 
    B foo(); 
}; 

struct B { 
    A a; 
}; 

B A::foo() { 
    B result; 
    return result; 
} 
+0

在測試事情的時候,我保持內聯的foo實現。沒想到這實際上很重要。 – arithma 2012-04-25 09:56:34