Начнем с того, что я совсем нуб в 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 принятьодинарные и двойные?