是否可以使用Objective-C的C ++接口?

时间:2012-12-11 20:24:24

标签: c++ objective-c xcode interface

Objective-C类是否可以拥有C ++接口类型的实例变量?

我可以像这样在XCode(它编译)中声明一个C ++类:

class MyClass {
    void MyMethod();
}

但如果我尝试声明这样的界面:

interface class MyClass {
    void MyMethod();
}

我在编译期间遇到错误:Unknown type name 'interface'

我还没有尝试过把它放在ObjC类中,它根本就没有编译。是否尽可能使用C ++接口?

2 个答案:

答案 0 :(得分:2)

是的,这是可能的;它叫做Objective-C ++。

只需使用.mm文件扩展名命名您的实现文件,您就可以在C ++中执行任何操作。

然而,您不能做的事情之一是将C ++类子类化为Objective-C ++类;而是使用封装:

MyObjCppClass.h:

#import "MyCppClass.h"

@interface MyObjCppClass : NSObject
{
    MyCppClass *_myCppClass;
}

@end

MyObjCppClass.mm:

#import "MyObjCppClass.h"

@implemenation MyObjCppClass

- (id)init
{
    self = [super init];
    if (self != nil)
    {
        _myCppClass = new MyCppClass;
        _myCppClass->doThing();
    }
    return self;
}

- (void)dealloc
{
     delete _myCppClass;
     [super dealloc];
}

@end

答案 1 :(得分:2)

interface关键字是该语言的Microsoft扩展;它在标准C ++中不存在。这就是你遇到的问题。您不能在使用非Microsoft编译器编译的任何C ++程序中使用它们,因此,鉴于Microsoft不生成Objective-C编译器,否则您不能在Objective-C中使用它们。

类或结构可以用于相同的目的。 AFAIK,接口只是虚拟类,它们会产生一些额外的约束,因此您只需要确保自己遵循这些约束。