我正在使用Armadillo lib for linear algebra而且我是c ++的新手。
需要序列化std :: String中的某些矩阵(用于保存在某些xml中)并且有一些ready method that take a stream。
由于我不习惯读取充满了streamtring操作的c ++代码(我是一个python程序员),我决定制作一些与字符串一起工作的方法并隐藏流内容以提高我的代码可读性。< / p>
为了改进我的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 );
发生了什么事?
答案 0 :(得分:3)
更改行
prior = matrix_from_string( s );
到
prior = matrix_from_string<mat>(s);