从C+;调用Objective-C类方法+; 我从C++文件中调用ObjuleC类方法有点麻烦。例如:
在my.h中:从C+;调用Objective-C类方法+; 我从C++文件中调用ObjuleC类方法有点麻烦。例如:,c++,objective-c,C++,Objective C,在my.h中: @interface MyClass : NSObject { } + (void)myMethod:(NSString *)str; 在my.m中: + (void) myMethod:(NSString *)str { ... } 在my.cpp中: ?? 既然没有类实例,如何调用myMethod?它本质上是静态的 谢谢您需要一个.mm来调用Objective-C方法,而不是一个.cpp。除此之外,您关于“它本质上是静态的”的评论是准确的,因为您可以使用与在C++中调用
@interface MyClass : NSObject {
}
+ (void)myMethod:(NSString *)str;
在my.m中:
+ (void) myMethod:(NSString *)str { ... }
在my.cpp中:
??
既然没有类实例,如何调用myMethod?它本质上是静态的
谢谢您需要一个.mm来调用Objective-C方法,而不是一个.cpp。除此之外,您关于“它本质上是静态的”的评论是准确的,因为您可以使用与在C++中调用静态类函数类似的逻辑来调用它:
[MyClass myMethod:@"Some String"];
虽然在C++中,该方法不是静态的,但它不影响编译的结果,它在编译时没有被解析,它在一个类(MyClass metaclass)中运行。C++中的< /p> 对象与Objtovi.C中的对象不兼容。C++不能简单地调用C++的Objtovi-C方法。 但是,有一些解决方案:
如果我没有将所有.cpp文件转换为.mm的选项,我有哪些选项?我试图维护跨平台能力,所以我不能去改变文件类型。CPP文件可以调用任何旧的C++和.MM文件包含C++和Objto-C,所以一个瘦平台特定层是一种选择;或者,在Xcode中,使用工具栏上单词“View”上方的按钮打开右侧面板,转到“Identity and Type”,并将文件类型设置为Objective-C++。这将导致相关标志被发送到编译器,从而不会遵循“按文件名键入”的默认行为。@Asheh:您可以在Xcode中重写文件类型。单击项目导航器中的.cpp文件,文件检查器将显示一个名为“文件类型”的下拉列表。将此从默认值更改为Objto-C++源,然后CPP文件可以包含目标C语法,就像它是.MMI,在C++侧生成一些全局数据并用Objto-C访问它将是最可行的选择。