2011-05-21 60 views
4

在C++中,它可能有兩個班,讓我們稱他們爲AB,使得A有一個成員函數f返回B類的一個對象,並B有一個成員函數g返回類A的對象?互返回類型的成員函數(C++)

(下面的文本只是說明我已經「做了功課」。)

的問題就是怎麼寫的這些功能特徵,當一個在第一定義的類將有一個不完整返回類型。前向聲明在這裏沒有幫助,因爲對象是按值返回的。

是的,我知道所有的解決方法(朋友全局函數,通過指針返回...),但我只想知道上面的接口是否可以在C++中實現。爲了舉例說明,假設我試圖重載A類的operator()以返回B,並且類B返回A。由於我是重載操作符,我必須返回值(除非我想動態分配地獄:),()必須作爲成員函數重載,所以我不能使用全局好友。

回答

7

是的,實施的class A函數定義你宣佈class B

class B; 

class A 
{ 
    B f(); 
}; 

class B 
{ 
    A g() { A a; return a; } 
}; 

B A::f(){ B b; return b; } 
+2

函數原型/聲明不要後」是否需要完全定義的類型?很高興知道! – Xeo 2011-05-21 06:18:37

0

另一種可能的方式來打破依賴環是使用模板成員函數,就像這樣:

struct A { 
    template<typename T> T f() { return T(); } 
}; 

struct B { 
    A g() { return A(); } 
}; 

int main() { 
    A a; 
    B b = a.f<B>(); 
    A a1 = b.g(); 
    return 0; 
} 

它將爲運營商工作()也是如此,儘管調用語法會比較難看:a.operator()<B>()

相關問題