2013-12-22 7 views
0

저는 벡터를 가져 와서 수정하는 기능이 있습니다. 이 함수에 matrix_row 인스턴스를 전달하려면 어떻게해야합니까?boost : 벡터 대신 matrix_row를 사용합니다.

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

:

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>&)' 

답변

1

당신은 템플릿 기능을 useVector 만들 수 : 내가 얻을

#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) 식의 주석 모든 복사 작업을하고 싶지 않아 또는 (가능한 경우) 전체 컨테이너 대신 반복자를 전달하십시오.

template<class IterT> 
void useVector(IterT begin, IterT end) { 
... 
} 
+0

감사! 템플릿 함수를 사용하는 것보다 "더 깔끔한"솔루션이 없다는 것이 두려웠습니다. – bennihepp