2012-12-17 66 views
8

我有一個用於網絡通信的C++庫,我需要爲Mac端口,以前這個庫曾用於Windows C++應用程序。Objective-C或Objective C++是否可以處理C++異常?

的C++網絡庫的流程是基於錯誤的情況下例外,而不是返回錯誤代碼或最後一個錯誤,..

現在,因爲在Mac上,我們使用的Objective-C/C++應用程式。我需要在Objective-C/C++中有UI,但用於核心網絡功能的庫是相同的C++庫。

所以我的問題是,目標C能夠處理C++調用拋出的異常嗎?如果是這樣,怎麼樣?如果不是,我該如何解決它? 或者我們編寫一個圍繞C++ Lib調用的包裝並使用異常並返回錯誤代碼?

請指教,如何解決它..

回答

7

如果你在OS X上使用iOS或64位運行時,事情幾乎可以正常工作。您可以編寫一個C++樣式的try/catch,它將按預期工作,就像@ try/@ catch一樣。請注意,對於Objective-C和C++異常,您仍然有兩種不同的樣式;唯一的統一是special case,其中catch(...)@catch(...)捕獲全部異常,Objective-C或C++。這對於集中清理代碼來說是非常有用的,但是對於異常本身而言,所有你可以用@盲目地再次拋出它。

但無論如何,exceptions shouldn't be used for flow control in Objective-C(或Objective-C++)程序。實際上,您應該盡力在C++異常退出相關庫時將其轉換爲更合適的機制,例如NSError。特別是,避免讓任何人通過任何Apple或第三方框架提出任何建議 - 大多數這樣的框架對於Objective-C異常來說並不是特例安全的,更不用說C++了,因此結果是不確定的(主要圍繞着內存泄漏,儘管許多其他故障是可能的)。

+0

很好的答案。例外情況在很好的Objective-C代碼中很少見,並且當來自其他語言時,人們往往會忘記它。 –

+2

你能解釋一下如何從C++端捕捉代碼嗎? –

-3

簡單的回答:是的。怎麼做?也許這個link可以提供幫助。

+3

請不要張貼鏈接的答案。您發佈的鏈接現已停止,所以此答案無用。 –