Класс c ++ с другом objective-c

У меня есть приложение, которое представляет собой смесь C ++ и objective-c.

Довольно много классов C ++ существуют просто как фасады для доступа к базовому объекту objective-c из остальной части приложения x ++ .

Моя проблема связана с дизайном: класс target-c должен вызывать обратно в класс C ++ с помощью набора методов, которые я бы предпочел пометить как частные - ни один другой класс C ++ (даже производные классы) не должен возиться с ними.

Но я не могу пометить их как личные, так как там нет ' Кажется, что это способ сделать методы класса объективного c «друзьями» класса c ++.

Я считал обман и использование макросов для пометки методов c ++ как общедоступных, когда определено __ 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);
};
12
задан Chris Becke 13 June 2018 в 13:06
поделиться