是否可以从Objective C Class调用Objective-C ++类和方法?
我们已经用Objective C代码编写了一个项目。现在我们要集成一个C ++类,所以我想只将一个类更改为Objective C ++,它与本机C ++类交互,其他类将保留在Objective C中。 可能吗?谁能帮助我找到更好的解决方案?
感谢。
答案 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?