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

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

テンプレートを使用しなくてもいい方法(デフォルトのパラメータに注意してください)。 問題は、両方のクラスが互いの定義を必要とすることです。しかし、テンプレートソリューションが示すように、「真の」循環依存性はありません。定義が必要なときに循環クラスの依存を避ける

+1

は忘れてはいけないDevStudioの2005年に私のために罰金コンパイル宣言されていないときに使用されたときにテンプレートがインスタンス化されます。 – Skizz

+0

ええ、上記の回避策はうまくいきます。 テンプレートを削除する方法はありません。 – arithma

答えて

3

あなたは前方宣言は、場合にあなたが(A::fooの場合のように)の値で返しているに十分であるという事実を利用することができます。

struct B; 

struct A { 
    B foo(); 
}; 

struct B { 
    A a; 
}; 

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

テスト中に、私はfoo実装をインラインに保ちました。それは実際には問題になるとは思わなかった。 – arithma

関連する問題