Objective-Cで.mmファイルを使用した場合の癖/驚きは何ですか?
-
05-07-2019 - |
質問
Objective-C iPhoneアプリでいくつかのC ++ STLコレクションを使用したい。どうやらこれは、ファイルに拡張子「.mm」を付けることで可能です。 。これに関連する癖/驚きは何ですか?
使い慣れた基本的なコンテナ(ベクトル、キュー、セットなど)を使用したい
乾杯!
解決
Objective-CでのC ++の使用を参照してください。できることとできないことの詳細なリスト。あなたが期待するほとんどのことを行うことができます。 Objective-CクラスからC ++クラスを継承したり、その逆を行ったりすることはできません。C++例外とObjective-C例外を混在させることはできません。C++では、Objective-Cにはないいくつかの新しいキーワードを導入します。
他のヒント
Objective-C ++の主な癖は、-fobjc-call-cxx-cdtorsをg ++に渡さないと、ObjCオブジェクトのC ++インスタンス変数のコンストラクタとデストラクタを呼び出さないことです。そのため、このオプションをオンにすることを忘れないでください。うまくいくはずです。
ファイルはObjective-C ++コンパイラでコンパイルされるため、gccよりもg ++のように動作しますが、それが望ましいので、おそらく驚くことではありません。 Objective-C側からは、落とし穴に気づいていません。Objective-C++を大いに活用したいくつかの大規模プロジェクトに取り組んできました。 Objective-Cの予約語もObjective-C ++でも予約されているため、サードパーティのC ++ライブラリで問題が発生する場合があることに注意してください(たとえば、パブリックインターフェイスのパラメーターとして" id"を使用する場合) 。
あなたはそれがどれほどうまく機能するかに驚くでしょう。 .jmファイルでObj-CとC ++を混在させる際に問題が発生したことはありません。