作者atst (電腦無法阻止人類做蠢事)
看板MacDev
標題Re: [問題] 請問.cp .m問題
時間Mon May 12 19:42:52 2008
※ 引述《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
推 RichieRich:感謝 明天試試看 05/12 20:29
推 jclin:改成.mm後,裡面的 c++ 本來就可以直接寫obj-c的語法來存取 05/13 00:22
→ atst:是的,不過有些情況下,有人可能會想用.cpp或.cp來做,而不是 05/13 01:19
→ atst:使用.mm, 我之前就遇過這種要求. 05/13 01:20
推 Blueshiva:簡單說,mm是obj-c和c++的橋樑,在裡面包成c++物件就可 05/13 10:36
→ Blueshiva:以在cpp裡面使用,包成obj-c物件就可以在m中使用 05/13 10:36