2010-10-29 3 views
10

У меня есть приложение, представляющее собой сочетание C++ и object-c.C++ класс с объективом-c friend

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

Моя проблема - один из элементов дизайна: класс object-c должен перезванивать в класс C++ с помощью набора методов, которые я бы предпочел отмечать как private - никакой другой класс 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 OnPaint(CGContextRef cdc); 
}; 

ответ

7

Если вы должны сделать это, вы можете обернуть свой класс Obj-C в объект C++, который будет дружественным CMyView. Вам понадобится еще один уровень абстракции между двумя уже существующими вами классами.

+3

lol. класс оболочки для переноса моего класса wapper. –

+2

Yup, это радость Obj-C++ –

+0

Это современная разработка программного обеспечения, написание слоев и оберток – Lothar