如何在C ++中使用自定义Objective-C对象?

时间:2013-09-22 11:17:50

标签: c++ ios objective-c

我正在实现一些快速排序算法,为了获得最佳性能,我想在Objective-C中使用C ++绑定。但我希望我的算法能够处理用户自定义对象以及与NSComparator类似的东西;我可以在C ++中使用哪种类型来使用这些对象?我可以模拟一个班级吗?

请告诉我您在C ++中绑定自定义对象以及在C ++中使用NSComparator的最佳解决方案?

致以最诚挚的问候,

HervéHL。

1 个答案:

答案 0 :(得分:0)

在@Dave的帮助下,我终于找到了从NSArray中提取指针的解决方案,无论包含的类型如何,执行一些复杂的操作,然后使用 void * 类型重新组装指针。

只需将.m文件重命名为.mm即可启用Objective-C ++功能。

void *array[[self count]]; //create an empty void* array
for (uint i = 0; i < [self count]; i++)
{
    int address = (int)[self objectAtIndex:i];
    array[i] = (void *)address; //insert NSObjects pointers into void* array
}

要从void *数组中取回NSObjects,只需按以下步骤操作:

NSMutableArray *doneAr = [[NSMutableArray alloc] init]; //create a NSMutableArray
for (uint i = 0; i < [self count]; i++)
{
    void *tmp = (void **)done + i; //extract the pointer in the void* array
    NSString *strTmp = (NSString *)(*((Class *)tmp)); //convert it back to origin type (here NSString *)
    [doneAr addObject:strTmp]; //add it back to the previously created NSMutableArray
}

希望这个答案对未来的问题有所帮助。如果您希望在C ++实现中使用像我这样的NSComparator,只需将.m文件重命名为.mm文件,以便可以使用Objective-C ++功能;然后导入并使用您需要的东西(例如NSComparator)。