参考网站:点击打开链接
个人程序:
1.使用函数模板的样例:
#include<iostream>
#include<sstream>
using namespace std;
//使用函数模板
template <class in_type, class out_type>
out_type convert(const in_type & in_value){
stringstream stream;
stream << in_value;
out_type out_value;
stream >> out_value;
return out_value;
}
int main(){
int t1 = 123;
double t2;
string t3;
char t4[10];
t2 = convert<int,double>(t1); cout<<"t2 = "<<t2<<endl;
t3 = convert<int,string>(t1); cout<<"t3 = "<<t3;
}
因为stream << in_valule是把in_value的值从存储在stream流中,然后再进行其他操作的,故而在多次使用同一个stream时,需要先进行上一次的清理工作。
这里的清理工作包括两部分:
stream.str(); —— 清空内容
stream.clear(); —— 清除错误标志
程序示例:
未做清理工作时:
#include<iostream>
#include<sstream>
using namespace std;
template <class T>
void print(string name, const T &value){
cout<<name<<" = "<<value<<endl;
}
int main(){
stringstream stream;
int in_int = 123;
string in_string = "123";
string out_string;
int out_int;
stream << in_int; print<int>("in_int",in_int);
stream >> out_string; print<string>("out_string",out_string);
cout<<endl<<"-------------------------------------"<<endl;
<span style="color:#ff6666;">stream << in_string;</span> print<string>("in_string",in_string);
stream >> out_int; print<int>("out_int",out_int);
return 0;
}
输出:
错误解析:
如上,因为没有进行清理工作,再次使用stream从string转换成int时,出现错误:out_int = 1789546338。
正确程序:
#include<iostream>
#include<sstream>
using namespace std;
template <class T>
void print(string name, const T &value){
cout<<name<<" = "<<value<<endl;
}
int main(){
stringstream stream;
int in_int = 123;
string in_string = "123";
string out_string;
int out_int;
stream << in_int; print<int>("in_int",in_int);
stream >> out_string; print<string>("out_string",out_string);
cout<<endl<<"-------------------------------------"<<endl;
<span style="color:#3366ff;"> stream.str("");
stream.clear();</span>
stream << in_string; print<string>("in_string",in_string);
stream >> out_int; print<int>("out_int",out_int);
return 0;
}
输出: