在if语句中实例化模板类的问题

时间:2018-06-03 13:13:34

标签: c++ matlab templates mex

首先,我是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?

0 个答案:

没有答案