boost: использование matrix_row вместо вектора

0

У меня есть функция, переносящая вектор и изменяя его. Как передать экземпляр matrix_row этой функции? Я не хочу делать какие-либо операции копирования

#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/vector.hpp>
using namespace boost::numeric::ublas;

void useMatrixRow(matrix_row<matrix<double> >& mRow) {
//  ...
}
void useConstVector(const vector<double>& v) {
//  ...
}
void useVector(vector<double>& v) {
//  ...
}
void useMatrix(matrix<double>& m) {
    matrix_row<matrix<double> > mRow(m, 0);
    useMatrixRow(mRow); // works
    useConstVector(mRow); // works
    // useVector(mRow); // doesn't work
}

При раскомментировании выражения useVector (mRow) я получаю:

error: invalid initialization of reference of type 'boost::numeric::ublas::vector<double>&' from expression of type 'boost::numeric::ublas::matrix_row<boost::numeric::ublas::matrix<double> >'
src/PythonWrapper.cpp:60:6: error: in passing argument 1 of 'void useVector(boost::numeric::ublas::vector<double>&)'
Теги:
boost
ublas

1 ответ

1
Лучший ответ

Вы можете использовать useVector для шаблона:

template<class T>
void useVector(T &v) {
...
}

Альтернативно (если возможно), передайте итераторы вместо всего контейнера:

template<class IterT>
void useVector(IterT begin, IterT end) {
...
}
  • 0
    Спасибо! Я боялся, что нет более «чистого» решения, чем использование шаблонной функции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню