我正在实现一些快速排序算法,为了获得最佳性能,我想在Objective-C中使用C ++绑定。但我希望我的算法能够处理用户自定义对象以及与NSComparator类似的东西;我可以在C ++中使用哪种类型来使用这些对象?我可以模拟一个班级吗?
请告诉我您在C ++中绑定自定义对象以及在C ++中使用NSComparator的最佳解决方案?
致以最诚挚的问候,
HervéHL。
答案 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)。