2012-12-17 101 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

请不要张贴链接的答案。您发布的链接现已停止,所以此答案无用。 –