与Objective-c朋友的c ++类

时间:2010-10-29 13:46:31

标签: c++ objective-c

我有一个混合使用c ++和objective-c的应用程序。

相当多的c ++类仅仅作为从x ++应用程序的其余部分访问底层objective-c对象的外观。

我的问题是设计问题:objective-c类需要通过一组我更喜欢标记为私有的方法回调到c ++类 - 没有其他c ++类(甚至不是派生类)需要弄乱这些。

但我无法将它们标记为私有,因为似乎没有办法让Objective-c类方法成为c ++类的朋友。

我在定义__OBJC__时考虑作弊并使用宏来将c ++方法标记为公开,但这会改变方法的修饰并导致链接错误。

其他人遇到过这个?

// MyView.mm
@interface MyView : NSView {
@public
  CMyView* _cpp;
}

-(void)drawRect:(NSRect)dirtyRect {
  CGContextRef cgc = (CGContextRef)[[NSGraphicsContext currentContext]graphicsPort];
  _cpp->Draw(cgc);
}
...

// MyView.h
class CMyView {
  id _view; 
public:
  // this method should be private. It exists ONLY for the MyView obj-c class.
  void Draw(CGContextRef cdc);
};

1 个答案:

答案 0 :(得分:8)

如果你必须这样做,你可以将你的Obj-C类包装在一个C ++对象中,该对象是CMyView的。 你需要在你已经拥有的两个类之间进行另一层抽象。