我如何實例化一個Objective-c類到CPP類?Objective-C實例到C++類
例如我CPP類:
class Foo{
public:
Foo();
private:
MyObjcClass* myObjcClass; //it does not work
}
我可怎麼辦呢?
注意我使用.m作爲Objective-C和.cpp作爲C++。
非常感謝!
我如何實例化一個Objective-c類到CPP類?Objective-C實例到C++類
例如我CPP類:
class Foo{
public:
Foo();
private:
MyObjcClass* myObjcClass; //it does not work
}
我可怎麼辦呢?
注意我使用.m作爲Objective-C和.cpp作爲C++。
非常感謝!
要麼
id
。如果使用id
,你應該介紹您的定義類型,例如:
// Foo.mm
Foo::~Foo() {
MyObjcClass * a = this->myObjcClass;
[a release];
}
在一般情況下,你應該保存類型(MyObjcClass
)和避免使用id
,但在宣佈變量爲id
與C和C++兼容,因此您可以使用id
來避免將包含Foo.hpp的所有內容編譯爲ObjC++。
它的工作正常,只有一個問題,如何實例呢? – ademar111190
@ ademar111190您可能在尋找:'Foo :: Foo():myObjcClass([MyObjcClass new]){}'?如果你選擇了'id',那麼只有'Foo'需要改爲編譯爲ObjC++,但是看到Foo的所有東西都只需要C++。 – justin
完美! dataDownload = [DataDownload new];工作太多,但非常感謝你只是在:) – ademar111190
有兩種方法可以做到這一點。理智的方法是使用Objective-C++。您可以使用擴展名爲.mm
的文件執行此操作,也可以更改您的構建設置。缺省情況下是基於文件擴展名進行編譯,但是您可以強制它在.cpp
或.m
文件上使用Objective-C++。
瘋狂的方法是在objc.h中使用原始的Objective-C接口。
都是真的,但還有第三種方法,就是在所有純C++代碼中使用'id',並將代碼必須將ObjC(或ObjC++)分成不同的文件,就像Justin所建議的那樣。 – abarnert
儘管你不需要它,如果你想這樣做,你將需要**來使用'.mm'擴展名。 – 2012-11-07 19:12:03
@ H2CO3你有理由,對不起。我更新了這個問題。 – ademar111190
那你爲什麼不把文件重命名爲'.mm'? – 2012-11-07 19:15:01