Objective C到C ++桥的自动代码生成

时间:2009-04-02 04:06:52

标签: c++ objective-c

我正在寻求Mac / iPhone开发者关于新项目的意见。我们的想法是使用swig(www.swig.org)启动一个开源计划,用于自动生成从目标c到c ++的桥接,以便可以从cocoa / cocoa touch访问c ++应用程序。

Apple通过客观的c ++为混合目标c和c ++提供了非常好的支持,但是手工编写这些桥接可能是单调乏味且容易出错的。这个项目打算做的是提供一种在c ++上自动生成目标c接口和包装器的方法,这样任何cocoa或cocoa touch应用程序都会在下面看到面向对象的c ++接口。

我非常感谢对这个想法的任何意见或建议。

2 个答案:

答案 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扩展名给你的东西),它可能有些微不足道。