2

Objective-C クラスが C++ インターフェイス型のインスタンス変数を持つことは可能ですか?

次のように、XCode (コンパイル) で C++ クラスを正常に宣言できます。

class MyClass {
    void MyMethod();
}

しかし、次のようなインターフェイスを宣言しようとすると:

interface class MyClass {
    void MyMethod();
}

コンパイル中にエラーが発生します:Unknown type name 'interface'

私はまだ ObjC クラスに入れようとさえしていません。単にコンパイルできません。C++ インターフェイスを使用することはまったく可能ですか?

4

2 に答える 2

2

はい、可能です。これは Objective-C++ と呼ばれます。

ファイル拡張子を使用して実装ファイルに名前を付けるだけ.mmで、C++ でできるほとんどすべてのことができます。

ただし、できないことの 1 つは、C++ クラスを Objective-C++ クラスとしてサブクラス化することです。代わりにカプセル化を使用します。

MyObjCppClass.h:

#import "MyCppClass.h"

@interface MyObjCppClass : NSObject
{
    MyCppClass *_myCppClass;
}

@end

MyObjCppClass.mm:

#import "MyObjCppClass.h"

@implemenation MyObjCppClass

- (id)init
{
    self = [super init];
    if (self != nil)
    {
        _myCppClass = new MyCppClass;
        _myCppClass->doThing();
    }
    return self;
}

- (void)dealloc
{
     delete _myCppClass;
     [super dealloc];
}

@end
于 2012-12-11T20:28:57.147 に答える
2

interfaceキーワードは、言語に対する Microsoft 拡張です。標準 C++ には存在しません。それがあなたが直面している問題です。Microsoft 以外のコンパイラでコンパイルされた C++ プログラムでは使用できないため、Microsoft が Objective-C コンパイラを作成していないことを考えると、Objective-C では使用できません。

クラスまたは構造体は、同じ目的を果たすことができます。私の知る限り、インターフェイスは、いくつかの追加の制約を課す単純な仮想クラスであるため、自分でそれらに従うことを確認する必要があります。

于 2012-12-11T20:32:20.947 に答える