如何从Objective-C(.m)调用Objective-C ++(。mm)

时间:2013-10-09 22:59:21

标签: objective-c objective-c++

如果不将每个.m文件更改为.mm,是否有发言权?

行。我正在努力实现答案,但遇到了麻烦。看看下面的Objective C ++ .h和.mm

Objective-C ++ - IDCaptureTemplateCommand.h:

#include "Template.h"

@interface IDCaptureTemplateCommand : NSObject
@property (nonatomic, strong) IDCaptureTemplateCommand *IDCaptureTemplateCommand;

@end

Objective-C ++ - IDCaptureTemplateCommand.mm:

#include "IDCaptureTemplateCommand.h"

@implementation IDCaptureTemplateCommand

- (id)init
{
    self = [super init];
    if (self) {
        self.captureTemplateCommand = [[IDCaptureTemplateCommand alloc] init];
    }
    return self;
}

@end

Objective-C - IDCameraViewController.h

#import <UIKit/UIKit.h>
#import "IDCaptureTemplateCommand.h"

@interface IDCameraViewController : UIViewController <UINavigationControllerDelegate>

@property (nonatomic) IDCaptureTemplateCommand *captureCommand;  //ERROR - Unknown type name 'IDCaptureTemplateCommand'

@end

1 个答案:

答案 0 :(得分:3)

你可以这样做,就像你可以使用C或C ++中的C ++一样。您需要能够使用纯Objective-C声明接口,然后可以使用Objective-C ++编写实现。

如果您的头文件使用C ++,例如你的类有一个std::string实例变量,然后为了使功能可以从Objective-C访问,你必须编写一个包装器或者在接口上隐藏C ++,这样你的Objective-C文件就不需要了任何C ++声明。