首先,我是c ++的菜鸟,我迷失了。我用谷歌搜索了几个小时,但我认为我的问题不论是利基还是太容易。这是:
我正在编写一个要在matlab中使用的c ++ mex文件。但是,我想允许两个单一的双精度输入。所以我想用模板来实现这个目标。
我是这堂课:
i
然后在main.cpp中:
template< typename T > class img {
T *_data;
public:
img (T *_data) : _data(_data) {}
T &operator[]( int i ) { return _data[ i ]; }
}
现在编译器抱怨&#34;错误:使用未声明的标识符myimg&#34;。
我认为这是因为对象void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
if (mxIsDouble(prhs[0])) {
double *f = (double *)mxGetPr( prhs[ 0 ] );
img<double> myimg(f);
} else if (mxIsSingle(prhs[0])) {
float *f = (float *)mxGetPr( prhs[ 0 ] );
img<float> myimg(f);
}
mexPrintf( "value of myimg[%d] = %f\n", 10, myimg[10] );
}
仅存在于myimg
范围内,对吗?
如果我在if
语句之前定义img<double> myimg(f);
它可以正常工作,但显然只适用于双打。
帮助
P.S。我发现了这个相关的堆栈问题:Can a MATLAB Mex function accept both single and doubles?