编写个函数模板,接受一个ostream引用和一个值,将该值写入流,该如何解决

编写个函数模板,接受一个ostream引用和一个值,将该值写入流
编写个函数模板,接受一个ostream引用和一个值,将该值写入流
用4中不同的类型调用函数
分别写至cout,文件和stringstream 
C/C++ code
#include <iostream> 
#include <string>
#include <fstream>
#include <sstream>
using namespace std;
template <typename T1,typename T2>
T1& print(T1 &s,T2 val)
{
s < <val;
return s;
}

int main()
{
double dval=0.88;
float fval=-12.3;
string oristr="this is a test";
ostringstream oss(desstr);
ofstream outFile("result.dat");
//写入cout
print(cout,-3) < <endl;
print(cout,dval) < <endl;
print(cout,fval) < <endl;
print(cout,oristr) < <endl;
//写入文件
print(outFile,-3) < <endl;
print(outFile,dval) < <endl;
print(outFile,fval) < <endl;
print(outFile,oristr) < <endl;
outFile.close();
//写入stringstream
print(oss,-3) < <endl;
print(oss,dval) < <endl;
print(oss,fval) < <endl;
print(oss,oristr) < <endl;
//将stringstream中的字符串输出到cout已经行验证
cout < <oss.str() < <endl;
return 0;
}

这个什么问题 #include<sstream>怎么用的

------解决方案--------------------
原来楼主在纠缠编译通不过的问题啊+_+?
那个改一句便可以了(原来还以为是楼主的笔误呢……)

ostringstream oss(desstr);
改为:
ostringstream oss;
------解决方案--------------------
我看不懂你在问什么,随便说说,首先你的 desstr 压根没有定义过,肯定无法编译通过,
另外一个可能让你疑惑的地方应该是 ostringstream 的那个参数为 const string& 的构造函数吧,
你这么用肯定不知道它会有什么表现,而且你很可能误解了它的意义,看看我改的代码,
应该能让你清楚这个构造函数的意义:
C/C++ code

#include<iostream>
#include<string>
#include<fstream>
#include<sstream>
using namespace std;
template<typename T1,typename T2>
T1& print(T1 &s,T2 val)
{
    s<<val;
    return s;
}

int main()
{
    double dval=0.88;
    float fval=-12.3;
    string oristr="this is a test";
    string desstr("this is a long string, to show how to use the constructor of basic_ostringstream<>.");
    ostringstream oss(desstr);//只有用“比输入内容更长”的内容去初始化它,才能看到这个初始化的意义。
    ofstream outFile("result.dat");

    //写入cout
    print(cout,-3)<<endl;
    print(cout,dval)<<endl;
    print(cout,fval)<<endl;
    print(cout,oristr)<<endl;
    //写入文件
    print(outFile,-3)<<endl;
    print(outFile,dval)<<endl;
    print(outFile,fval)<<endl;
    print(outFile,oristr)<<endl;
    outFile.close();
    //写入stringstream
    print(oss,-3)<<endl;
    print(oss,dval)<<endl;
    print(oss,fval)<<endl;
    print(oss,oristr)<<endl;
    //将stringstream中的字符串输出到cout已经行验证
    cout<<oss.str()<<" <<<<<<Note: content after \"" << oristr <<  "\" is the rest of original buffer."<<endl;

    return 0;
}

------解决方案--------------------
上面的朋友都说了问题的意见.我要说的是另外的问题:
楼主的那个模版函数,其实只需要一个参数,因为第一个参数总是输出流,是一个抽象类.如下面:
template<typename T2>
ostream& print(ostream& os, T2& val)
{
s << val;

return s;
}

因为,楼主上面的例子里面, ostreamstream, ofstream都是 ostream的子类.

根据print函数的内容,其实这个根本没有必要编写这个函数.