あなたが10月ファイルを使用しようとしているコメントに言及したので、ここでは(あなたはまだoct-files上のマニュアルのセクションを経る必要があります)それを行う方法は次のとおりです。
$ cat foo.cc
#include <octave/oct.h>
DEFUN_DLD (foo, args, ,
"foo help text")
{
if (args.length() != 1)
{
print_usage();
return octave_value_list();
}
const NDArray m = args(0).array_value();
if (error_state)
{
error ("foo: first input must be a numeric N dimensional array");
return octave_value_list();
}
const dim_vector dims = m.dims();
for (int i = 0; i < dims.length(); i++)
octave_stdout << "Dim " << i << " has length " << dims(i) << std::endl;
return octave_value_list();
}
$ mkoctfile foo.cc
$ octave
octave:1> foo (rand (5, 3, 1, 2))
Dim 0 has length 5
Dim 1 has length 3
Dim 2 has length 1
Dim 3 has length 2
octave:2> foo ("bar")
error: invalid conversion from string to real N-d array
error: foo: first input must be a numeric N dimensional array
あなたが本当に使用したい場合
$ cat foo.c
#include "mex.h"
void
mexFunction (int nlhs, mxArray* plhs[],
int nrhs, const mxArray* prhs[])
{
const mwSize nd = mxGetNumberOfDimensions (prhs[0]);
const mwSize* dims = mxGetDimensions (prhs[0]);
for (int i = 0; i < nd; i++)
mexPrintf("Dim %i has length %i\n", i, dims[i]);
return;
}
$ mkoctfile --mex foo.c
$ octave
octave:1> foo (rand (5, 2, 3))
Dim 0 has length 5
Dim 1 has length 2
Dim 2 has length 3
私はあなただけMEXインターフェースから始まり、C(あなたは 'のsizeofと思ったことを考慮していると思います:MEXインターフェースは、ここに一切チェック(間違った入力を与えた場合、それはセグメンテーションフォールトします)との簡易版です'あなたに答えを与えてくれただろう)。 Octaveを使用しているので、代わりに[octファイル](https://www.gnu.org/software/octave/doc/interpreter/Oct_002dFiles.html#Oct_002dFiles)を試してください。 OctaveのC++ APIは、Octave言語自体に、よりシンプルで似ています。 – carandraug
とにかくあなたの質問に答えるために(そして、Octaveを使っているなら、代わりにoctファイルを使うほうが良いと再度強調します)、関数 'mxGetNumberOfDimensions'と' mxGetDimensions'を使います。 Octaveのマニュアルセクション[Mex-filesでの行列と配列の操作](https://www.gnu.org/software/octave/doc/interpreter/Working-with-Matrices-and-Arrays-in-Mex_002dFiles.html) )と[mexインターフェイスのためのOctaveのdoxygenリファレンス](http://octave.org/doxygen/4.0/df/d4e/mex_8cc.html) – carandraug
ここで提示された解決策はおそらく正しいものですが、返答のためのThnx、Octaveクラッシュ私のCコードで関数を使用するたびに。私はoctファイルを見ていきます。 – Smeik