我有一个混合使用c ++和objective-c的应用程序。
相当多的c ++类仅仅作为从x ++应用程序的其余部分访问底层objective-c对象的外观。
我的问题是设计问题:objective-c类需要通过一组我更喜欢标记为私有的方法回调到c ++类 - 没有其他c ++类(甚至不是派生类)需要弄乱这些。
但我无法将它们标记为私有,因为似乎没有办法让Objective-c类方法成为c ++类的朋友。
我在定义__OBJC__
时考虑作弊并使用宏来将c ++方法标记为公开,但这会改变方法的修饰并导致链接错误。
其他人遇到过这个?
// 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);
};
答案 0 :(得分:8)
如果你必须这样做,你可以将你的Obj-C类包装在一个C ++对象中,该对象是CMyView的。 你需要在你已经拥有的两个类之间进行另一层抽象。