我正在尋找將字符串轉換爲int的最佳方法,並且遇到了一個我不明白的函數:是什麼意思:'std :: ios_base&(* f)(std :: ios_base&))'
template <class T>
bool from_string(T& t,
const std::string& s,
std::ios_base& (*f)(std::ios_base&))
{
std::istringstream iss(s);
return !(iss >> f >> t).fail();
}
我知道什麼是模板,我不知道這意味着什麼:
std::ios_base& (*f)(std::ios_base&)
這裏是正在創建一個新的指針,爲什麼有彼此相鄰的括號中2倍的表達?
+1用於識別ostream操縱器簽名。解密函數簽名很容易,但是沒有其他人似乎理解特定的語義:) –
@MatthieuM:「+1」James對於識別iostream操縱器幾乎是一種攻擊。 :-)可怕的是,其他三位回答的人沒有認出來。我認爲人們至少應該知道一個人使用的工作的一般方式。乾杯, –
順便說一句,你能告訴我一些事情,如果這個函數返回布爾值,爲什麼實際轉換髮生?它在最後說'return!(iss >> f >> t).fail()'。我在這裏閱讀(雖然我知道一些人說,這個網站'錯過了')http://www.cplusplus.com/reference/iostream/ios/fail/'失敗'函數只返回true或false,如果被檢查的語句是真的或者類似的話,它不會執行任何命令。 ADDED:嗯,也許這個轉換是事先執行的,並且由於參數是通過引用傳遞的,所以它們可以在以後使用 – user1042840