iPhoneアプリを作りたいのですが、フレームワークはC++で作ろうと思っています。Objective-C++ でテンプレートなどを使用することは可能ですか。本当に問題は、ブーストを使用できるかどうかです。
6 に答える
Objective-C++ でテンプレートなどを使用することは可能ですか。
はい。ただし、純粋な C++ レイヤーと Objective-C++ コードの間で型とインターフェイスを混在させる方法に注意する必要があります。std::string
などの型を変換する必要があるレイヤー間の境界にNSString
注意してください。
たとえば、純粋な C++ でコア ゲーム エンジンを実装し、コントローラーと GUI コードのみを Objective-C++ で実装することができます。Obj-C++ コードは、純粋な C++ エンジンと Cocoa の間の接着剤です。
本当に問題は、ブーストを使用できるかどうかです。
iPhone OS が完全な POSIX レイヤーを提供する OS X のサブセットであることを考えると、ほとんどの Boost ライブラリは問題なく動作するはずです。ダーウィンのコードを書くのと同じようにすべきです。
Objective-C++ には、注意すべき多くの制限があります ( Objective-C 2.0 リファレンス ガイドから直接引用)。
- Objective-C 構文を使用して C++ オブジェクトを呼び出すことはできません
- Objective-C オブジェクトにコンストラクタまたはデストラクタを追加することはできません
- キーワード this と self を同じ意味で使用することはできません
- クラス階層は分離されています。C++ クラスは Objective-C クラスから継承できず、Objective-C クラスは C++ クラスから継承できません
- Objective-C コードでスローされた例外は C++ コードでキャッチできず、逆に、C++ コードでスローされた例外は Objective-C コードでキャッチできません。
C++ のすべてが Objective C++ でサポートされています。ブーストを使用できるはずですが、プラットフォームに依存するものをいくつか移植する必要がある場合があります。
C++ で実行できるすべてのことを Objective-C++ で実行できるわけではないことに注意してください。たとえば、Objective-C クラスから C++ オブジェクトの仮想関数を呼び出すことはできません。C/C++ 関数を呼び出すと、やりたいことが何でもできます。
Objective C++ は C++ のスーパーセットです。C/C++ でできることはすべて Obj-C++ でも実行できます。「Objective」部分には、とりわけ、Smalltalk 風のメッセージング システムと C++ へのその他の追加機能が含まれています。
Objective C の C++ オブジェクトは、必ずしも C++ のように動作するとは限りません。たとえば、コンストラクタとデストラクタは自動的に呼び出されず、仮想メソッドを実装できない (と思います)...
ブーストは便利ですが、プロジェクトに追加するオーバーヘッドも大きくなります。
追加する前に、本当に必要かどうかを確認してください。
正規表現のサポート: RegexLite。
他のすべての場合:ココア.