c++ - 打印到控制台或字符串/流

标签 c++ c++11

我需要一个 C++ 函数,将一些文本数据(多行)转储到控制台:

void DumpData() const
{
    std::cout << "My Data 1" << std::endl;
    std::cout << "My Data 2" << std::endl;
}

这应该是默认行为,但是,还必须可以传递一些其他流对象来代替 std::cout,如下所示:

void DumpData(std::ostream& Stream = std::cout) const
{
    Stream << "My Data 1" << std::endl;
    Stream << "My Data 2" << std::endl;
}

现在回答我的问题:

  1. 我应该为参数使用的正确类型是什么(本例中为 std::ostream&)?
  2. 默认值是多少,可以直接使用= std::cout吗?

而且(3.),在调用这个函数之后,如果我传递自己的流对象,我需要逐行迭代这个流中的所有字符串。实现这一目标的最佳方法是什么?

最佳答案

你为什么不自己尝试一下呢?

这是代码 in Coliru以 std::cout 和 std::stringstream 为例(显然删除了 DumpData 的 const 性):

#include <iostream>
#include <sstream>

void DumpData(std::ostream& Stream = std::cout)
{
    Stream << "My Data 1" << std::endl;
    Stream << "My Data 2" << std::endl;
}
int main() {
    DumpData();
    std::stringstream ss;
    DumpData(ss);
    std::string l;
    while(std::getline(ss, l)) {
        std::cout << l << std::endl;
    }
    return 0;
}

输出是您所期望的。

关于c++ - 打印到控制台或字符串/流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43001139/

相关文章:

c++ - 使用 cin 获取类的枚举类型

c++ - 使用套接字 rfcomm 的蓝牙连接

C++ 如何传递多个参数?

c++ - 用于制作C++库的API宏

c++ - 尝试在 CentOS 7 上从源代码编译 PhantomJS 时出现段错误

c++ - 使用其指针从列表中删除项目

c++ - 使用 cin.get() 读取字符

c++ - 在模板类上调用的析构函数过多 (N)RVO 优化

c++ - 对象销毁时调用回调函数

multithreading - OpenMP while 循环