2012-01-31 8 views
5

C++とObjective CのObjective C++の統合の程度は?私はObjective C++がC++とObjective Cの両方のコードをコンパイルすることを認識していますが、実際には相互に相互作用しますか?Objective C++でのC++の使用?

たとえば、Objective Cオブジェクトのテンプレートを作成できますか? C++クラスからObjective Cクラスを継承する方法はありますか?

私が基本的に尋ねようとしているのは、言語を混在させるか、単に同じファイルで一緒にコンパイルするのですか?どの程度まで?

+0

あなたはそれが後方にあります。 .mmファイルの場合、C++コンパイラはObjective-Cコードをコンパイルします。 .mファイルの場合、代わりにCコンパイラが使用されます。 C++とObjective-Cのクラス階層を混在させることは、通常は可能ではありませんが(トリックがあるとは思いますが)、一方のクラスインスタンスを他方のクラスインスタンスに埋め込むことができます。 –

答えて

2

Objective-C++を使用してアプリケーションを構築するのはかなり一般的です。 Objective-CをC++コードで囲むことはできますが、オブジェクトを共有することはできません。例えば、Objective-CではNSStringオブジェクトを作成し、hasSuffixメソッドを呼び出すことはできません。C++やその逆の場合。これらの2つの間でコンテンツを共有するには、Objective-CオブジェクトがObjective-Cランタイム環境でのみ使用可能で、C++オブジェクトがC++ランタイム環境でのみ使用できるため、構造体、文字、intなどのCタイプを使用する必要があります。 。彼らが共有し、通信できる唯一のものはCです。

これらの2つの間でやりとりする方法の例を少し紹介します。

NSString * objcStr = [[NSString alloc] initWithString:@"Hello World!"]; 
std::string cppStr ([objcStr UTF8String]); 
std::cout << cppStr; 
2

Objective-C++および/またはWikipedia articleのObjective-C言語ガイドセクションを参照してください。

あなたの特定の質問に答えるために、はい言語は「相互作用する」ことができます。はい、Objective-Cオブジェクト(idは単なるポインタ)のテンプレートを作成できますが、Objective-CオブジェクトでRAIIを使用することは想定していません。いいえ、Objective-CクラスのC++クラスまたはC++クラスからObjective-Cクラスを派生させることはできません。

関連する問題