从Objective C Classes调用Objective C ++方法

时间:2014-03-27 05:11:56

标签: c++ ios objective-c objective-c++

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

我们已经用Objective C代码编写了一个项目。现在我们要集成一个C ++类,所以我想只将一个类更改为Objective C ++,它与本机C ++类交互,其他类将保留在Objective C中。 可能吗?谁能帮助我找到更好的解决方案?

感谢。

3 个答案:

答案 0 :(得分:2)

是的,你可以这样做。只要类的接口是C-ish,Objective-C就不关心实现是Objective-C还是Objective-C ++。

答案 1 :(得分:1)

是。这是可能的。只需在扩展名中隐藏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代码一起使用。

答案 2 :(得分:1)

是的,只要您将C ++类型的使用限制在实现文件中,就可以从常规Objective C调用所有的ObjC ++类。有一些问题,比如包装任何&#34;松散&#34;您导入的功能&#34; extern&#34; C&#34;&#39; (就像你在混合C ++和直接C时所做的那样),但如果你可以假设一个适度的Xcode版本(并且不需要32位MacOS支持),你可以轻松地用一个类完成所有这些扩展(又名&#34;课程延续&#34;)。

如果你想要一些关于这个话题的提示和技巧,我前段时间是NSBrief的一位嘉宾,我详细讲述了使用ObjC ++的各个方面:http://nsbrief.com/113-uli-kusterer/

您也可以在这个类似的问题上找到答案:Can I separate C++ main function and classes from Objective-C and/or C routines at compile and link?