я использую Armadillo lib для линейной алгебры и я новичок в c ++.
необходимо сериализовать некоторую матрицу в std :: String (для сохранения ее в некотором xml)и есть какой-то готовый метод, который принимает поток .
из-за того, что я не привык читать код на С ++, полный операций с потоковыми строками (я программист на Python), я решилсоздать несколько методов, которые работают со строкой, и спрятать содержимое потока для улучшения читабельности моего кода.
для улучшения моих знаний c ++, я решил попробовать использовать шаблон для создания одного метода для всех классов броненосца: mat, rowvec, colvec (все они имеют .load () и .save ())
Я решил написать эти методы в отдельном файле utils.h, он также будет полезен в будущем проекте!
проблема со вторым методом:
using namespace std;
// 1°
template<typename Matrix>
string matrix_to_string(Matrix& m) {
stringstream ss;
m.save(ss, arma::arma_ascii);
return ss.str();
}
// 2°
template<typename Matrix>
Matrix matrix_from_string(string& s) {
stringstream ss;
ss << s;
Matrix m;
m.load(ss, arma::arma_ascii);
return m;
}
первый метод работает отлично, но со вторым .. если я пытаюсь использовать его, я получаю ошибку:
no matching function for call to ‘matrix_from_string(std::string&)’
Я называю это так:
mat prior;
string s = XML.getValue("prior", ""); // my XML lib, it works fine
prior = matrix_from_string( s );
что происходит?