2010-10-29 20 views
10

Ich habe eine Anwendung, die eine Mischung aus C++ und Ziel-c ist.C++ Klasse mit objective-c Freund

Eine ganze Menge der C++ - Klassen existieren lediglich als Fassaden, um auf das zugrunde liegende objective-c-Objekt vom Rest der x ++ - Anwendung zuzugreifen.

Mein Problem ist eines der Design: Die Objective-C-Klasse muss zurück in die C++ - Klasse über eine Reihe von Methoden, die ich lieber als private markieren würde - keine andere C++ Klasse (nicht einmal abgeleitete Klassen) muss damit herumspielen.

Aber ich kann sie nicht privat markieren, da es scheint, keine Möglichkeit zu sein, objektive Klassenmethoden "Freunde" einer C++ - Klasse zu machen.

Ich überlegte, zu betrügen und Makros zu verwenden, um die C++ - Methoden als public zu markieren, wenn __OBJC__ definiert ist, aber das die Dekoration der Methode ändert und zu Verbindungsfehlern führen würde.

jemand anderes dies angetroffen?

// 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); 
}; 

Antwort

7

Wenn Sie tun müssen, dass Sie Ihre Obj-C-Klasse in einem C++ Objekt wickeln kann, die CMyView friended ist. Sie benötigen eine andere Abstraktionsebene zwischen den beiden Klassen, die Sie bereits haben.

+3

lol. eine Wrapper-Klasse, um meine Wapper-Klasse zu umhüllen. –

+2

Yup, das ist die Freude von Obj-C++ –

+0

Das ist moderne Softwareentwicklung, Schreiben von Layern und Wrappern – Lothar

Verwandte Themen