2012-12-17 9 views
8

私はMac用に移植する必要のあるネットワーク通信用のC++ライブラリを持っています。以前はこのライブラリはWindows C++アプリケーションで使用されていました。今Objective-CまたはObjective C++はC++例外を処理できますか?

C++ネットワークLibのではなく、エラーコードまたは直近のエラーを返すエラーが発生した場合の例外に基づいているの流れ..

我々はアプリケーションのためのObjective-C/C++を使用してMac上で以来。 Objective-C/C++にUIを用意する必要がありますが、コアネットワーク機能に使用されるlibは同じC++のlibです。

私の質問は、目的Cは例外を処理することができますC + +の呼び出しでスローされますか?もしそうなら、どうですか?どうすれば解決できますか? または、C++ Lib呼び出しの周りにラッパーを作成し、例外を消費してエラーコードを返しますか?

解決方法を教えてください。

答えて

7

OS X上でiOSまたは64ビットランタイムを使用している場合、ほとんどのことが成立します。あなたはC++スタイルのtry/catchを書くことができ、@ try/@ catchと同様に期待どおりに動作します。 Objective-CとC++の例外には、2つの異なるスタイルがあります。統一はspecial caseであり、catch(...)または@catch(...)すべて例外、Objective-CまたはC++例外をキャッチします。これは、あなたのクリーンアップコードを一元管理するのに少し役立ちますが、あなた自身が例外で行うことができることはすべて、それを再び盲目的に投げることです。

いずれにしても、exceptions shouldn't be used for flow control in Objective-C(またはObjective-C++)プログラム。実際には、C++例外が問題のライブラリを終了し、NSErrorなどのより適切なメカニズムに変換されるときに、C++例外をトラップするように努力する必要があります。特に、Appleやサードパーティ製のフレームワークを使用しないようにしてください。大部分のフレームワークはObjective-C例外の例外ではなく、C++の例外でもありません。その結果は未定義です(ほとんどがメモリリークを回避します。他の失敗も可能です)。

+0

良い答え。例外は良いObjective-Cコードではまれであり、人々は他の言語から来たときにそれを忘れる傾向があります。 –

+2

C++側からスローコードをキャッチする方法を説明できますか? –

-3

かんたん回答:はい。どうやってするの?多分このlinkが助けることができます。

+3

リンクのみの回答は投稿しないでください。あなたが投稿したリンクは現在死んでいるので、この答えは役に立たない。 –

関連する問題