是否可以将C++接口与Objective-C一起使用
Is it possible to use C++ interfaces with Objective-C?
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
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 如何将数组从Objective-C发送到C++函数
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 是否可以将C++接口与Objective-C一起使用
- 将C++与Objective-C一起使用,如何修复"Conflicting declaration 'typedef int BOOL'"?
- 为什么std::tr1::函数与Objective-C块一起工作?