Передача NSArray в функцию cpp - PullRequest
2 голосов
/ 29 января 2011

Мне нужно вызвать функцию CPP, как

void myFunc(float **array2D, int rows, int cols)
{
}

внутри объекта-c. По сути, массив создается в моем коде target-c, когда я создаю объект NSArray. Теперь проблема в том, как передать этот массив моей функции cpp.

Я немного новичок в этих смешанных материалах c ++ / target-c, поэтому любые советы будут высоко оценены.

Спасибо

Ответы [ 3 ]

6 голосов
/ 29 января 2011

Полагаю, вам нужно преобразовать 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 с):

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];
}
2 голосов
/ 29 января 2011

Посмотрите на эту запись .

Проверьте ответ, в котором упоминается использование [NSArray getObjects] для создания массива в стиле c.

Вот код, который постер вставил туда:

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);
0 голосов
/ 16 октября 2011

С другой стороны, поскольку CFArray является бесплатным для моста NSArray, вы могли бы вызвать эти функции C из своей функции C ++? Я бы осмотрелся, не удивился бы, если бы не было оболочки C ++ для предоставления аналогичной семантики, или ее можно было бы написать достаточно легко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...