gpt4 book ai didi

c++ - 有空流吗?可选打印

转载 作者:行者123 更新时间:2023-12-05 08:45:10 29 4
gpt4 key购买 nike

我使用类似的函数

void doStuff(type thing, bool print = false, std::ostream& S = std::cout)
{
thing++;
if(print)
S << "new thing: " << thing << '\n';
}

这样我就可以使用相同的函数并决定是否要调用它来打印正在发生的事情的文档,如果我希望我可以在单独的流上打印它 - 我不知道我是否可以这样做std::ostream-

我现在相信这样做会更好

void doStuff(type thing, std::ostream& S = NULL)
{
thing++;
if(S)
S << "new thing: " << thing << '\n';
}

但这不起作用,因为 std::ostream 不接受 NULL

问题:
-是否有某种流类型的常量可以停止 if 条件?
- 我可以使用更灵活的不同类型的流来接受像字符串流和文件流这样的流吗?
- 有没有更好的方法来处理灵活的文档?

最佳答案

您可以使用 Null sinkboost::iostream图书馆。

这是一个工作示例:

#include <iostream>
#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/device/null.hpp>

boost::iostreams::stream<boost::iostreams::null_sink> nullstream{boost::iostreams::null_sink()};

void print_to_stream(std::ostream& s = nullstream)
{
s << "hello" << std::endl;
}

int main()
{
std::cout << "calling print_to_stream with s = std::cout" << std::endl;
print_to_stream(std::cout);
std::cout << "calling print_to_stream without argument" << std::endl;
print_to_stream();

return 0;
}

您可能希望将变量 nullstream 隐藏在某些 namespace 或类中。

关于c++ - 有空流吗?可选打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73946484/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com