【问题标题】:Automatic code generation for Objective C to C++ bridgeObjective C 到 C++ 桥的自动代码生成
【发布时间】:2009-06-02 01:21:32
【问题描述】:

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

Apple 为通过 Objective C++ 混合 Objective C 和 C++ 提供了很好的支持,但是手工编写这些桥可能很乏味并且容易出错。这个项目打算做的是提供一种在 c++ 上自动生成目标 c 接口和包装器的方法,以便任何 cocoa 或 cocoa touch 应用程序碰巧看到下面带有 c++ 的面向对象的目标 c 接口。

对于这个想法的任何意见或建议,我将不胜感激。

【问题讨论】:

    标签: c++ objective-c


    【解决方案1】:

    我认为这没有必要。使用 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 的对象模型不支持多重继承和运算符重载。

    【讨论】:

      【解决方案2】:

      我觉得这是一个足够好的想法,如果类似的东西还不存在,我会感到惊讶。另一方面,由于您可以直接编译 C++,(看看 .mm 扩展名给您带来了什么)它可能有点微不足道。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-29
        • 2011-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-23
        • 2014-07-17
        相关资源
        最近更新 更多