是否可以将C++接口与Objective-C一起使用

Is it possible to use C++ interfaces with Objective-C?

本文关键字:Objective-C 一起 接口 C++ 是否      更新时间:2023-10-16

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

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

class MyClass {
    void MyMethod();
}

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

interface class MyClass {
    void MyMethod();
}

我在编译过程中收到错误:Unknown type name 'interface'

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

interface关键字

是该语言的Microsoft扩展;它不存在于标准C++中。这就是你遇到的问题。你不能在任何用非Microsoft编译器编译的C++程序中使用它们,所以鉴于Microsoft不会产生Objective-C编译器,不,你不能在Objective-C中使用它们。

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

是的,这是可能的;它被称为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