从Objective C类调用Objective c++方法

Calling Objective C++ methods from Objective C Classes

本文关键字:Objective c++ 方法 调用      更新时间:2023-10-16

是否可以从Objective- C类调用Objective- c++类和方法?

我们已经用Objective C代码写了一个项目。现在我们有一个c++类要集成,所以我想只改变一个类到Objective ++,与本地c++类交互,其他的将留在Objective C。这可能吗?有没有人能帮我找到更好的解决方案?

谢谢。

可以。只要类的接口是C-ish, Objective-C并不关心实现是Objective-C还是objective - c++。

是。这是有可能的。只是隐藏c++字段的扩展。例如:

//.h-file
@interface IntVector: NSObject
- (int) valueAtIndex:(NSUInteger) idx;
- (NSUInteger) size;
- (void) insertValue:(int) val atIndex:(NSUInteger) idx;
@end
//.mm-file
#include <vector>
using namespace std;
@interface IntVector()
{
    vector<int> _vals;
}
@end
@implementation IntVector
- (int) valueAtIndex:(NSUInteger)idx
{
    return _vals[idx];
}
- (NSUInteger) size
{
    return _vals.size();
}
- (void) insertValue:(int) val atIndex:(NSUInteger) idx
{
    _vals.indest(_vals.begin()+idx, val);
}
@end
您可以在任何其他objective-c代码中使用该类。

是的,只要你限制你使用c++实现文件类型,你可以叫你的所有ObjC从常规目标C + +类有一些问题,如包装任何"宽松"的功能,你进口的外来的"C"(就像你会做连续混合c++和C),但如果你可以假设一个适度Xcode的最新版本(不需要支持32位MacOS),您可以很容易地用一个类做所有的扩展(又名"阶级延续")。

如果你想要一些关于这个话题的技巧和技巧,我是不久前NSBrief的一集的嘉宾,在那里我详细地谈论了使用objc++的几乎每个方面:http://nsbrief.com/113-uli-kusterer/

你也可以找到类似问题的答案:我可以在编译和链接时将c++的主函数和类与Objective-C和/或C例程分开吗?