允许stringstream和outstream作为参数

Allow stringstream and outstream as parameter

本文关键字:参数 outstream stringstream 允许      更新时间:2023-10-16

我正在尝试编写一个将信息写入流的函数。我需要能够传递一个stringstream或ostream。我尝试用F(std::ios* out)声明函数,但后来当我使用<<操作符写入它时,我得到了这个错误:error: no match for operator<<。我该如何声明函数呢?

我想你正在寻找c++参考

void F(std::ostream& out)
{
}

就可以了;注意,这将假设char流,否则:

template <typename Char/*=char*/, typename Traits/*=std::char_traits<CharT> */>
    void F(std::basic_ostream<Char, Traits>& os)
{
}

首先,你可能应该传递一个引用给流,否则你将不得不编写(*out)<<来使插入操作符正确工作(它在流上工作,而不是在指针指向流)。

但更重要的是,std::ios只是流的基类之一,即包含不依赖于模板形参的IO类成员的基类。

如果你想接收一个通用的输出流,你应该接受对std::ostream(基于char的流)或std::wostream(基于wchar_t的流)的引用;如果你想要通用,你应该为char_typechar_traits制作函数模板,以允许std::basic_ostream class的所有变体(注意,编写字符类型无关的代码通常一点也不简单,如果你不需要它,它可能不值得努力-最好使用一些TCHAR类策略)。

所以,可能你想要的是:

F(std::ostream & out)

(对于输入流,它是完全相同的,但与std::istream/std::wistream/std::basic_istream)

stringstream ostream。通用I/O函数通常应该以ostreamistream作为引用。

void fun(std::ostream& out);

这将适用于stringstream和其他ostream子类,如fstream