2012-02-24 47 views
2

我使用的是Armadillo lib for linear algebra,我是新來的C++。返回一個模板並且沒有匹配的調用函數

需要序列化std :: String中的某些矩陣(用於保存在一些xml中)並且有一些ready method that take a stream

由於我不習慣閱讀完整的streamtring操作(我是一個python程序員)的C++代碼,我決定使用一些方法來處理字符串並隱藏流的東西以提高我的代碼可讀性。

用於做出改良效果在我的C++知識,我決定嘗試使用模板爲使所有犰狳類的一種方法:()他們都.load(和.save())墊,rowvec,colvec

我決定把這些方法寫在一個單獨的文件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); 

發生了什麼事?

+1

你怎麼叫它? – m0skit0 2012-02-24 10:52:46

+1

您可能在未明確提供類型的情況下調用該函數。類型不能從返回類型推斷出來(它可以從參數中推斷出來,這可能是你的第一個函數起作用的原因)。您應該將調用發佈到代碼進行確認。 – 2012-02-24 10:53:26

+0

好了!對不起, – nkint 2012-02-24 10:56:18

回答

3

更改線路

prior = matrix_from_string(s); 

prior = matrix_from_string<mat>(s); 
+0

它的工作原理,謝謝 – nkint 2012-02-24 10:57:42