2011-01-28 3 views
2

にNSArrayのを渡す私はObjective-Cのオブジェクト内CPP機能

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

のようなCPP関数を呼び出す必要があります。基本的には、NSArrayオブジェクトを作成するときに、配列は私のobjective-cコードで作成されます。さて、問題は、この配列を自分のcpp関数に渡す方法です。

私はこれらの混在したC++/objective-cのものに少し慣れていますので、ヒントは高く評価されるでしょう。

おかげ

+0

ここまでの答えは 'array2D'は一次元であると仮定しています。それを確認できますか?パラメータは 'float ** array2D'なので二次元配列だと思いますが、間違っている可能性があります。 –

+0

C++を使用している場合、std :: vectorを使用しないのはなぜですか?マトリックスの側面を送る必要はありません。 'void myFunc(std :: vector > array2D){... code ...}' –

+0

配列は二次元ですが、NSArrayのNSArrayを浮動小数点に変換しようとしているのでここでは問題ありません** 。それでも目的はNSArray - > float * – Abbas

答えて

4

はここ posterがそこに入れたコードです。以下のような 何か:

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]; 
} 

や、コメンターは(あなたのNSArrayNSNumber 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]; 
} 
+0

の 'for'ステートメントの代わりに' for(NSString * element in array){... code ...} 'を使用します。列挙型を使用する方が速く、変数宣言をいくつか節約できます。あなたの答えは良いです:) –

+0

@Cesar A. Rivas:編集: – pt2ph8

2

このpostを見てください。

[NSArray getObjects]を使用して、Cスタイルの配列を作成する方法を説明しています。私はあなたがプレーンなC配列にNSArrayを変換する必要が推測

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

を変換することです。しかし、OPの関数は 'float'の配列を期待しているので、このメソッドは実際には適用できません。 –

0

代わりに、CFArrayはフリーダイヤルにNSArrayにブリッジがあるため、あなたはそれらのCを呼び出すことができますあなたのC++関数からの関数?私は周りを見回したいが、同様のセマンティクスを提供するC++ラッパーがない場合、または十分に簡単に書かれたものがあれば驚かないだろう。