代码之家  ›  专栏  ›  技术社区  ›  Chris Becke

C++类与Objul-C朋友

  •  12
  • Chris Becke  · 技术社区  · 15 年前

    我有一个应用程序,它是C++和ObjaveC的混合体。

    相当多的C++类仅仅作为外观来访问底层Objy-C对象,从其他的X++应用程序中访问。

    我的问题是一个设计:ObjuleC类需要通过一组方法来调用C++类,我喜欢将其标记为私有-没有其他C++类(甚至派生类)需要用这些方法来解决。

    但我不能把它们标记为私有的,因为似乎没有一种方法可以使Obje+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 Draw(CGContextRef cdc);
    };
    
    1 回复  |  直到 7 年前
        1
  •  8
  •   Joshua Weinberg    15 年前

    如果你必须这样做,你可以把你的Obj-C类包装在C++对象中,并将其添加到CyMyVIEW中。 在已经存在的两个类之间,您需要另一个抽象级别。