2

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

我可以在 XCode 中声明一个 C++ 类(它可以编译),如下所示:

class MyClass {
    void MyMethod();
}

但是如果我尝试声明这样的接口时:

interface class MyClass {
    void MyMethod();
}

在编译过程中出现错误:Unknown type name 'interface'

我什至还没有尝试将它放在 ObjC 类中,它根本无法编译。是否可以使用 C++ 接口?

4

2 回答 2

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
于 2012-12-11T20:28:57.147 回答
2

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

类或结构可以达到相同的目的。AFAIK,接口只是施加一些额外约束的虚拟类,所以你只需要确保自己遵循这些。

于 2012-12-11T20:32:20.947 回答