Objective-C类是否可以拥有C ++接口类型的实例变量?
我可以像这样在XCode(它编译)中声明一个C ++类:
class MyClass {
void MyMethod();
}
但如果我尝试声明这样的界面:
interface class MyClass {
void MyMethod();
}
我在编译期间遇到错误:Unknown type name 'interface'
我还没有尝试过把它放在ObjC类中,它根本就没有编译。是否尽可能使用C ++接口?
答案 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,接口只是虚拟类,它们会产生一些额外的约束,因此您只需要确保自己遵循这些约束。