簡體   English   中英

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

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

Objective-C類是否可以具有C ++接口類型的實例變量?

我可以在XCode(可以編譯)中聲明一個C ++類,如下所示:

class MyClass {
    void MyMethod();
}

但是如果我嘗試聲明這樣的接口時:

interface class MyClass {
    void MyMethod();
}

編譯期間出現錯誤: Unknown type name 'interface'

我什至沒有嘗試將其放入ObjC類中,它根本無法編譯。 是否可以使用C ++接口?

是的,這是可能的; 它叫做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

interface關鍵字是該語言的Microsoft擴展; 它在標准C ++中不存在。 這就是您遇到的問題。 您不能在使用非Microsoft編譯器編譯的任何C ++程序中使用它們,因此,鑒於Microsoft不產生Objective-C編譯器,不,您不能在Objective-C中使用它們。

類或結構可以達到相同的目的。 AFAIK,接口只是虛擬類,它們施加了一些其他約束,因此您只需要確保自己遵循這些約束即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM