Проблемы с созданием экземпляра класса шаблона внутри оператора if - PullRequest
0 голосов
/ 03 июня 2018

Начнем с того, что я совсем нуб в C ++, и я заблудился.Я гуглил несколько часов, но думаю, что моя проблема нишевая или слишком простая.Вот так:

Я пишу mex-файл c ++ для использования в matlab.Тем не менее, я хотел бы разрешить оба одинарных ввода с двойной точностью.Поэтому я хочу использовать шаблоны для достижения этой цели.

У меня есть этот класс:

template< typename T > class img {
    T *_data;
public:
    img (T *_data) : _data(_data) {}
    T &operator[]( 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] );
}

Теперь компиляторжалуется на «ошибку: использование необъявленного идентификатора myimg».

Я думаю, это потому, что объект myimg существует только внутри области действия if, верно?

Если я определюimg<double> myimg(f); перед оператором if он работает, но, очевидно, только для двойных чисел.

Справка

PS Я нашел этот связанный вопрос о стеке: Может ли функция MATLAB Mex принятьодинарные и двойные?

...