2010-10-29 59 views
10

我有一個應用程序,這是C++和objective-c的混合體。C++ class with objective-c朋友

相當多的C++類僅僅作爲從x ++應用程序的其餘部分訪問底層objective-c對象的外觀而存在。

我的問題是設計之一:Objective-c類需要通過一組方法回調到C++類中,我傾向於標記爲private - 沒有其他C++類(甚至派生類)需要與這些混在一起。

但我不能將它們標記爲私有,因爲似乎沒有辦法使C++類的Objective-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 OnPaint(CGContextRef cdc); 
}; 

回答

7

如果必須這樣做,你可以換你的OBJ-C類是friended到CMyView C++對象。 你需要另外兩個級別的抽象,你已經有了兩個類。

+3

lol。一個封裝類來包裝我的wapper類。 – 2010-10-29 15:03:43

+2

是的,這是Obj-C++的喜悅 – 2010-10-29 15:49:03

+0

這就是現代軟件開發,編寫圖層和包裝 – Lothar 2016-02-17 09:55:58