天天看點

關于stringstream的學習

     <sstream>庫定義了三種類:istringstream、ostringstream和stringstream,分别用來進行流的輸入、輸出和輸入輸出操作。另外,每個類都有一個對應的寬字元集版本。簡單起見,我主要以stringstream為中心,因為每個轉換都要涉及到輸入和輸出操作。

注意,<sstream>使用string對象來代替字元數組。這樣可以避免緩沖區溢出的危險。而且,傳入參數和目标對象的類型被自動推導出來,即使使用了不正确的格式化符也沒有危險。

1、首先我們寫一個模闆函數,函數的功能:将任意類型為string類型

template <class T>
string to_string(IN T val)
{
 stringstream ss;
 ss<<val;
 return ss.str();
}
int main(int argc, char*argv[])
{
  string ret = to_string(1.2); //"1.2"
  ret = to_string(1);//"1"
}
           

1、我們再寫一個模闆函數,函數的功能:将任意類型為任意類型類型

template<class out_type,class in_value>
out_type convert(const in_value & t)
{
	std::stringstream stream;
	stream<<t;//向流中傳值
	out_type result;//這裡存儲轉換結果
	stream>>result;//向result中寫入值
	return result;
}
int main(int argc, char*argv[])
{
	string ret = convert<string>(123);
	double d1 = convert<double>(ret);
	int iRet = convert<int>(d1);
}</span>
           

注意:再進行多次轉換的時候,必須調用stringstream的成員函數clear()

繼續閱讀