我正在寻求Mac / iPhone开发者关于新项目的意见。我们的想法是使用swig(www.swig.org)启动一个开源计划,用于自动生成从目标c到c ++的桥接,以便可以从cocoa / cocoa touch访问c ++应用程序。
Apple通过客观的c ++为混合目标c和c ++提供了非常好的支持,但是手工编写这些桥接可能是单调乏味且容易出错的。这个项目打算做的是提供一种在c ++上自动生成目标c接口和包装器的方法,这样任何cocoa或cocoa touch应用程序都会在下面看到面向对象的c ++接口。
我非常感谢对这个想法的任何意见或建议。
答案 0 :(得分:4)
我认为这不是必要的。使用Objective-C ++,您根本不需要桥接器。给定C ++类定义
class Foo {
public:
void someMethod(void);
}
您可以在Objective-C ++代码中的任何位置使用该类。例如,在方法中:
- (void)myObjCMethod {
Foo myFoo;
myFoo.someMethod();
//etc.
}
您可以拥有指向C ++类的实例变量,因此您可以定义一个Objective-C类,如
@interface Bar : NSObject {
Foo *foo;
}
@property (assign) Foo * foo;
@end
@implementation
@synthesize foo;
- (void)dalloc {
delete foo;
[super dealloc];
}
- (id)init {
if(self = [super init]) {
foo = new Foo();
}
return self;
}
- (void)aMethod {
self.foo->barMethod();
}
我认为你不能模拟Objective-C方法,但Objective-C ++中的C ++模板实例化是公平的游戏。就像Objective-C是C的严格超集一样,Objective-C ++是C ++的超集,添加了Objective-C风格的类和消息传递。
如果你确实想要“桥接”一个C ++类,那么你一般会遇到麻烦,因为Objective-C的对象模型不支持多继承和运算符重载等事情。
答案 1 :(得分:1)
这对我来说是一个足够好的想法,如果它不存在,我会感到惊讶。另一方面,既然你可以直接编译C ++,(看看.mm扩展名给你的东西),它可能有些微不足道。