将NSArray传递给cpp函数

时间:2011-01-28 23:07:14

标签: objective-c nsarray c++

我需要调用像

这样的cpp函数
void myFunc(float **array2D, int rows, int cols)
{
}

在objective-c对象中。基本上,当我创建NSArray对象时,数组是在我的objective-c代码中创建的。现在,问题是如何将此数组传递给我的cpp函数。

我对这些混合c ++ / objective-c的东西有点新,所以任何提示都会受到高度赞赏。

由于

3 个答案:

答案 0 :(得分:6)

我猜你必须将NSArray转换为普通的C数组。 类似的东西:

NSArray *myNSArray; // your NSArray

int count = [myNSArray count];
float *array = new float[count];
for(int i=0; i<count; i++) {
    array[i] = [[myNSArray objectAtIndex:i] floatValue];
}

或者,作为评论者建议(假设您的NSArray包含NSNumber s):

NSArray *myNSArray; // your NSArray

int count = [myNSArray count];
float *array = new float[count];
int i = 0;
for(NSNumber *number in myNSArray) {
    array[i++] = [number floatValue];
}

答案 1 :(得分:2)

看看这个post

查看使用[NSArray getObjects]创建c样式数组的答案。

以下是poster放入的代码:

NSArray *someArray = /* .... */;
NSRange copyRange = NSMakeRange(0, [someArray count]);
id *cArray = malloc(sizeof(id *) * copyRange.length);

[someArray getObjects:cArray range:copyRange];

/* use cArray somewhere */

free(cArray);

答案 2 :(得分:0)

或者,由于CFArray是免费桥接到NSArray,你可以从你的C ++函数调用那些C函数吗?我会环顾四周,如果没有C ++包装器来提供类似的语义,或者可以很容易地编写一个,那就不会感到惊讶。