MEX を使用して、C++ コードと MATLAB のインターフェイスをとっています。私の C++ コードでは、出力が vector 型である必要があります。私は C++ を初めて使用するので、ポインターがどのように機能するかについて非常に混乱しています。MATLAB から入力配列を取得します
int *data_array_ptr
data_array_ptr=(int *)mxGetData(prhs[0]);
a = mxGetM(prhs[0]);
int int_data[a];
copy(*data_array_ptr, *data_array_ptr+ a, int_data);
ここで、int_data は、data_array_ptr の場所に格納されているすべてのデータを持っているはずです...これを行いますか?
それで、
double *data_out_ptr;
plhs[0]= mxCreateDoubleMatrix( (mwSize)m, (mwSize)n, mxREAL);
data_out_ptr= mxGetPr(plhs[0]);
len6=mxGetM(plhs[0]);
vector<double> data_out_data(*data_out_ptr,*data_out_ptr+len6);
これにより、空の出力行列の内容が data_out_data という名前のベクトルに配置されます。それはこれをしますか?
次に、data_out_data と int_data の両方を c++ 関数に渡したいと思います。ただし、data_out_data をポインターとして渡したいので、C++ 関数がベクトルにデータを入力し、関数が終了すると、MEX 関数は現在入力されているベクトルを確認し、それを double の配列に変換して戻すことができます。 plhs[0] を埋めることができます。
だから、次のようなもの
mexFunction(plhs[],prhs[]){
int *data_array_ptr
data_array_ptr=(int *)mxGetData(prhs[0]);
a = mxGetM(prhs[0]);
int int_data[a];
copy(*data_array_ptr, *data_array_ptr+ a, int_data);
double *data_out_ptr;
plhs[0]= mxCreateDoubleMatrix( (mwSize)m, (mwSize)n, mxREAL);
data_out_ptr= mxGetPr(plhs[0]);
len6=mxGetM(plhs[0]);
vector<double> data_out_data(*data_out_ptr,*data_out_ptr+len6);
foo(int_data, *data_out_data)
copy(data_out_data.begin(), data_out_data.end(), data_out_ptr);
}
foo が返されると、data_out_data が満たされます。私の関数には戻り引数がなく、data_out_data は vector 型でなければなりません。foo がデータを編集できるように、ベクトルを foo に渡すにはどうすればよいですか?
ありがとう!!