2009-04-11 3 views
6

iPhoneアプリを作りたいのですが、C++でフレームワークを作る予定です。 Objective-C++でテンプレートのようなものを使うことは可能ですか?私は実際に質問があると思う、私はブーストを使用することはできますか?Objective-C++でサポートされているC++の量

+0

これは答えとしてはあまり役に立たないかもしれませんが、既にC++を知っていれば、Objective-Cをピックアップするのは簡単です。もちろん、あなたがアプリケーションを移植しているのでなければ、私はその質問をもっと理解しています。 – Sean

+0

ゲームエンジンのように、非常に高いパフォーマンスが必要な場合は、C++を使用することが理にかなっています。 –

答えて

10

Objective C++ではすべてのC++がサポートされています。ブーストを使用することは可能ですが、プラットフォームに依存するものの一部を移植する必要があります。

+2

私は何の変更もせずにブーストを使用しました。それは箱からすぐに働いた。 –

+1

主なブーストライブラリは動作するはずですが、IO関連ライブラリのいくつかは恐らく動作しません。 – Zifre

+1

Zifre:あなたはそれらでいくつかの作業をする必要が本当です。 –

4

Objective C++はC++のスーパーセットです。 C/C++でできることはすべてObj-C++で行うことができます。 「目的」の部分には、とりわけSmalltalk風のメッセージングシステムとC++への追加が含まれています。

4

Objective-C++でC++でできることはすべて実行できないということを指摘しておきます。たとえば、Objective-CクラスからC++オブジェクトの仮想関数を呼び出すことはできません。いったんC/C++関数を呼び出すと、何でもできます。

+0

これは正しいと私は考えていません。 Objective-C++コード内からC++仮想メソッドを呼び出すことができます。 –

+0

http://tinyurl.com/yfrxwg9 状態: "Objective-C++は、同様にC++クラスのインスタンスをインスタンス変数として使用できるようにしています。これは、問題のC++クラス(すべてのスーパークラス)に仮想メンバ関数が定義されていない場合、仮想メンバ関数が存在する場合、C++クラスはObjective-Cインスタンス変数として機能しない可能性があります。 これは問題のない新しいバージョンのOSに表示されますが、iPHONE OS上にあると思います。 –

2

Objective CのC++オブジェクトは、必ずしもC++のように動作するわけではありません。たとえば、コンストラクタとデストラクタは自動的に呼び出されず、仮想メソッドを実装できないと思います(0120)。

13

Objective-C++のテンプレートのようなものを使うことはできますか?

はい、ただし、純粋なC++レイヤーとObjective-C++コードの間で型とインターフェイスをどのように混在させるかに注意する必要があります。 std::stringなどのタイプをNSStringなどに変換する必要があるレイヤー間の境界などを念頭に置いてください。

たとえば、純粋なC++でコアゲームエンジンを実装し、コントローラとGUIコードをObjective-C++で実装するだけで済みます。 Obj-C++コードは、純粋なC++エンジンとCocoaの間の接着剤です。

私はブーストを使用することができますか? iPhone OSを考える

はまだ、ほとんどのBoostライブラリ べき仕事だけで罰金フルPOSIX層を提供OS Xのサブセットです。ダーウィンのコードを書くのと同じようにすべきです。

のObjective-C++の制限の数は(Objective-C 2.0 Reference Guideから直接取得)を認識することがあります。

  • 追加することはできません
  • ++オブジェクトあなたがCを呼び出すためのObjective-Cの構文を使用することはできませんコンストラクタまたはデストラクタをObjective-Cオブジェクトに置き換えます。
  • キーワードをこれと自己互換的に使用することはできません。
  • クラス階層は別です。 C++クラスはObjective-Cクラスから継承できず、Objective-CクラスはC++クラスから継承できません
  • Objective-Cコードでスローされた例外はC++コードで捕捉されず、逆にC++でスローされた例外Objective-Cコードでコードを捕捉することはできません。
+1

答えをdownvoteしようとしている場合は、少なくとも理由を述べることができます。受け入れられた答え(currenly 9 votes)では、C++のすべての機能が利用可能であることがむしろ過度に単純化されています。この答えは、適格はいと言い、制限を説明している言語リファレンスから直接引用し、下落しています。それはどのように機能するのですか? – gavinb

+0

Objective-Cクラスに一般的なC++メソッドを追加できるという制限があります。しかし、Objective-CクラスにC++メソッドを追加することは可能であると考えるのは難しいです。これについてもっと説明できますか?リンクが壊れているので、私はそれをもっと確認することはできません。 – Eonil

+1

残念ながら、私は上記のものを置き換える同等の文書を見つけることができません。 ADCのドキュメントチームに、復元を要求するメモを送信しました。ポイント#2は単に '.mm'モジュールのObjCクラスがライフサイクル管理のために同じ' init'と 'dealloc'メソッドを持っていることを意味します。 ObjCとC++のアプローチを同じクラス内で組み合わせることはできません。 C++メソッドをObjCクラスに追加することはできませんが、2つのクラスを '.'mm'内で呼び出すことはできます。私はこれが上記を明確にすることを願っています。 – gavinb

1

Boostは便利ですが、プロジェクトに追加するための大きなオーバーヘッドです。

追加する前に本当に必要があることを確認してください。

正規表現サポートの場合:RegexLite

その他のもの:ココア

関連する問題