Согласно документации для матрицы повышений , существует три конструктора для класса матрицы: пустой, копируемый и один, принимающий два size_types для числа строк и столбцов. Так как boost не определяет его (вероятно, потому что есть много способов сделать это, и не каждый класс способен определить преобразование в любой другой класс), вам нужно определить преобразование.
Вот подход, который я бы использовал, но поскольку есть несколько способов сделать это, и вопрос не определяет, как вы хотите это сделать, вы можете найти другой подход, более подходящий для вашей ситуации.
void Foo(const std::vector<double> & v) {
size_t m = ... // you need to specify
size_t n = ... // you need to specify
if(v.size() < m * n) { // the vector size has to be bigger or equal than m * n
// handle this situation
}
matrix<double> mat(m, n);
for(size_t i=0; i<mat.size1(); i++) {
for(size_t j=0; j<mat.size2(); j++) {
mat(i,j) = v[i+j*mat.size1()];
}
}
}
Несколько замечаний по поводу предоставленного вами кода: std :: vector нужен шаблонный аргумент, и вы объявляете m
в качестве матрицы и входной аргумент для ее конструктора.