与Objective-c朋友的c ++类

Chr*_*cke 12 c++ objective-c

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

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

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

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

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

还有其他人遇到过吗?

// 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);
};
Run Code Online (Sandbox Code Playgroud)

Jos*_*erg 8

如果必须这样做,可以将Obj-C类包装在一个与CMyView相关的C++对象中.你需要在两个类之间进行另一级抽象.

  • 大声笑.包装我的wapper类的包装类. (3认同)
  • 是的,这就是Obj-C++的乐趣 (3认同)