У меня есть приложение, представляющее собой сочетание С++ и objective-c.
Довольно много классов С++ существуют просто как фасады для доступа к базовому объекту objective-c из остальной части приложения x ++.
Моя проблема - одна из задач: класс objective-c должен перезванивать в класс С++ с помощью набора методов, которые я бы предпочел отмечать как private - никакой другой класс С++ (даже не производные классы) должен быть возиться с ними.
Но я не могу пометить их как private, так как не существует способа сделать objective-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 OnPaint(CGContextRef cdc);
};