Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ iostream和stringstream的方法参数_C++ - Fatal编程技术网

C++ iostream和stringstream的方法参数

C++ iostream和stringstream的方法参数,c++,C++,我想向方法输入一个流参数,该方法可以是或,如下所示: void method(? out); // or void method(? in); 如果?是或则很简单。我不知道的是,如果参数是或,或者是或,该怎么办 可以做到这一点吗?实现std::istream和std::ostream的流,例如std::stringstream和std::fstream派生自std::iostream(因为它们都是类模板,您应该在标准中查找basic.)。也就是说,如果您确实需要一个用于输入和输出的流,您需要

我想向方法输入一个流参数,该方法可以是
,如下所示:

void method(? out); // or
void method(? in); 
如果
则很简单。我不知道的是,如果参数是
,或者是
,该怎么办


可以做到这一点吗?

实现
std::istream
std::ostream
的流,例如
std::stringstream
std::fstream
派生自
std::iostream
(因为它们都是类模板,您应该在标准中查找
basic.
)。也就是说,如果您确实需要一个用于输入和输出的流,您需要传递一个
std::iostream&

std::iostream
派生自
std::istream
std::ostream
。适当的类型是直截了当的:

  • 仅供阅读使用
    std::istream&
  • 仅用于编写,请使用
    std::ostream&
  • 对于读写,请使用
    std::iostream&
    (我认为我从未在生产代码中使用过此选项)

请注意,如果流可能是文件流,则在读写之间切换时需要查找:在不干预查找的情况下在读写之间切换,即使查找到当前位置,导致未定义的行为。

字符串流类和文件流类都公开派生自通用流基类
std::basic\u istream
std::basic\u ostream
。这意味着您可以(例如)将
std::ostringstream
对象传递给接受
std::ostream
的函数:

当然,除非您需要特定于派生流类的附加功能。例如,字符串流提供
str()
方法,文件流提供
open()
/
close()
成员函数。如果需要这些参数,可以使用
test()
将字符串流或文件流作为参数

无效测试(标准::istringstream和iss)
{
标准::cout
void test(std::ostream& os);

std::ostringstream buf;
test(buf); // Good!
void test(std::istringstream& iss)
{
     std::cout << iss.str(); // Works because the type is a stringstream
}