Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在if语句中实例化模板类时出现的问题 首先,我是C++的NoOB,我迷路了。我在谷歌上搜索了几个小时,但我认为我的问题要么是利基,要么太简单了。下面是: >我正在编写一个C++ MeX文件,用于从Matlab中使用。但是,我希望允许单精度和双精度输入。所以我想使用模板来实现这一点_C++_Matlab_Templates_Mex - Fatal编程技术网

在if语句中实例化模板类时出现的问题 首先,我是C++的NoOB,我迷路了。我在谷歌上搜索了几个小时,但我认为我的问题要么是利基,要么太简单了。下面是: >我正在编写一个C++ MeX文件,用于从Matlab中使用。但是,我希望允许单精度和双精度输入。所以我想使用模板来实现这一点

在if语句中实例化模板类时出现的问题 首先,我是C++的NoOB,我迷路了。我在谷歌上搜索了几个小时,但我认为我的问题要么是利基,要么太简单了。下面是: >我正在编写一个C++ MeX文件,用于从Matlab中使用。但是,我希望允许单精度和双精度输入。所以我想使用模板来实现这一点,c++,matlab,templates,mex,C++,Matlab,Templates,Mex,我上过这门课: template< typename T > class img { T *_data; public: img (T *_data) : _data(_data) {} T &operator[]( int i ) { return _data[ i ]; } } 模板类img{ T*_数据; 公众: img(T*_数据):_数据(_数据){} T&运算符[](int i){return_data[i];} } 然后在main.c

我上过这门课:

template< typename T > class img {
    T *_data;
public:
    img (T *_data) : _data(_data) {}
    T &operator[]( int i ) { return _data[ i ]; }
}
模板类img{
T*_数据;
公众:
img(T*_数据):_数据(_数据){}
T&运算符[](int i){return_data[i];}
}
然后在main.cpp中:

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] );
}
void-mexFunction(int-nlhs,mxArray*plhs[],
整数nrhs,常量mxArray*prhs[]
{
if(mxIsDouble(prhs[0])){
double*f=(double*)mxGetPr(prhs[0]);
img-myimg(f);
}else if(mxisingle(prhs[0])){
float*f=(float*)mxGetPr(prhs[0]);
img-myimg(f);
}
mexPrintf(“myimg[%d]的值=%f\n”,10,myimg[10]);
}
现在编译器抱怨“错误:使用了未声明的标识符myimg”


我认为这是因为对象
myimg
仅存在于
if
范围内,对吗

如果我定义
img myimg(f)if
语句之前的code>有效,但显然只适用于双打

帮助


另外,我发现了这个相关的堆栈问题:

“我认为这是因为对象
myimg
仅存在于
if
范围内,对吗?”-对。您必须编写一个额外的模板方法来完成所有需要做的事情。然后,您的
if
语句将实例化模板,并在
if
else
两种情况下调用其方法,从而执行相应类型的代码。或者,通过大量工作,使模板从非模板基类继承,然后实现一些原语。这打开了使用动态分配对象的可能性。谢谢@SamVarshavchick,这很有帮助。我想我想避免使用额外的模板方法,但我现在已经实现了它,并且工作得非常好。这个问题真的应该被否决吗?我不认为它应该被否决,在我看来,这是一个体面的问题。