作者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
1F:推 RichieRich:感谢 明天试试看 05/12 20:29
2F:推 jclin:改成.mm後,里面的 c++ 本来就可以直接写obj-c的语法来存取 05/13 00:22
3F:→ atst:是的,不过有些情况下,有人可能会想用.cpp或.cp来做,而不是 05/13 01:19
4F:→ atst:使用.mm, 我之前就遇过这种要求. 05/13 01:20
5F:推 Blueshiva:简单说,mm是obj-c和c++的桥梁,在里面包成c++物件就可 05/13 10:36
6F:→ Blueshiva:以在cpp里面使用,包成obj-c物件就可以在m中使用 05/13 10:36