[英]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.