Re: [問題] 請問.cp .m問題

看板MacDev作者 (電腦無法阻止人類做蠢事)時間16年前 (2008/05/12 19:42), 編輯推噓4(403)
留言7則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《RichieRich (Richie)》之銘言: : 請問副檔名.m是不是無法存取 std 的 : .cp 的東西無法存取cocoa ns的東西? : 請問還是有啥解決方式? 我猜,你要問的是: 1. 怎樣在Objective-C的程式中,存取C++的程式碼? 2. 怎麼在C++中,存取Objective-C的程式碼? 關於第一點,請將副檔名改成.mm 至於第二點,你恐怕得將Objective-C的程式,先用一個C++的類別包起來, 然後再由別的C++檔案去存取,像是下面: //Objective-C header, MyObject.h @interface MyObject: NSObject { //...blahblah } - (void)myMethod:(int)parameter; //...blahblah @end //Obj-C實作省略。 //Objective-C++ ,C++ style class, MyWrapper.h class MyObject; class MyWrapper { public: MyWrapper(); ~MyWrapper(); void myMethod(int parameter); private: MyObject* myObject; }; //Objective-C++, implementation, MyWrapper.mm //建構,解構省略 MyWrapper::myMethod(int parameter) { if(myObject) { [myObject myMethod:parameter]; } } 然後在你真正用到的地方使用wrapper: //Somewhere at XXX.cp int XXX::someFunction() { MyWrapper* wrapper = new MyWrapper; wrapper->myMethod(123); delete wrapper; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.84.252.229

05/12 20:29, , 1F
感謝 明天試試看
05/12 20:29, 1F

05/13 00:22, , 2F
改成.mm後,裡面的 c++ 本來就可以直接寫obj-c的語法來存取
05/13 00:22, 2F

05/13 01:19, , 3F
是的,不過有些情況下,有人可能會想用.cpp或.cp來做,而不是
05/13 01:19, 3F

05/13 01:20, , 4F
使用.mm, 我之前就遇過這種要求.
05/13 01:20, 4F

05/13 10:36, , 5F
簡單說,mm是obj-c和c++的橋樑,在裡面包成c++物件就可
05/13 10:36, 5F

05/13 10:36, , 6F
以在cpp裡面使用,包成obj-c物件就可以在m中使用
05/13 10:36, 6F

05/13 13:59, , 7F
05/13 13:59, 7F
文章代碼(AID): #18A2qz_r (MacDev)
討論串 (同標題文章)
文章代碼(AID): #18A2qz_r (MacDev)