У меня есть приложение, которое представляет собой смесь 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);
};