将C++对象添加到Objective-C类

Win*_*der 18 c++ iphone objective-c objective-c++

我正在尝试混合使用C++和Objective-C,我已经完成了大部分工作,但希望在Objective-C和C++代码之间有一个单独的接口类.因此,我想在ViewController接口中拥有一个持久的C++对象.

禁止使用没有类型的'myCppFile'声明失败:

#import <UIKit/UIKit.h>
#import "GLView.h"
#import "myCppFile.h"

@interface GLViewController : UIViewController <GLViewDelegate>
{
    myCppFile cppobject;
}

@end
Run Code Online (Sandbox Code Playgroud)

但是这在.mm实现文件中运行得很好(它不起作用因为我希望cppobject在调用之间保持不变)

#import "myCppFile.h"
@implementation GLViewController
- (void)drawView:(UIView *)theView
{
    myCppFile cppobject;
    cppobject.draw();
}
Run Code Online (Sandbox Code Playgroud)

Geo*_*che 28

您应该使用不透明指针,并且只在实现Objective-C类的文件中包含C++头.这样,您不会强制包含标头的其他文件使用Objective-C++:

// header:
#import <UIKit/UIKit.h>
#import "GLView.h"

struct Opaque;

@interface GLViewController : UIViewController <GLViewDelegate>
{
    struct Opaque* opaque;
}
// ...
@end
Run Code Online (Sandbox Code Playgroud)
// source file:
#import "myCppFile.h"

struct Opaque {
    myCppFile cppobject;
};

@implementation GLViewController
// ... create opaque member on initialization

- (void)foo
{
    opaque->cppobject.doSomething();
}
@end
Run Code Online (Sandbox Code Playgroud)

  • 我总是喜欢使用不透明的指针而不是强化指针 - 它可能会更多一些工作,但是你可以获得完整的类型安全性. (2认同)