gpt4 book ai didi

c++ - 实现无操作 std::ostream

转载 作者:IT老高 更新时间:2023-10-28 12:39:33 25 4
gpt4 key购买 nike

我正在考虑创建一个日志记录类,其中包含 Info、Error 等可以配置输出到控制台、文件或无处的成员。

为了提高效率,我想避免格式化将被丢弃的消息的开销(即不以详细模式运行时的信息消息)。如果我实现一个自定义的 std::streambuf 输出到任何地方,我想 std::ostream 层仍将执行所有格式化。任何人都可以建议一种方法来获得真正的“空” std::ostream,从而避免对使用 << 传递给它的参数做任何工作?

最佳答案

一个 swift google 想出了这个可能有用的例子。我不提供任何保证,除了它编译和运行:-)

#include <streambuf>
#include <ostream>

template <class cT, class traits = std::char_traits<cT> >
class basic_nullbuf: public std::basic_streambuf<cT, traits> {
typename traits::int_type overflow(typename traits::int_type c)
{
return traits::not_eof(c); // indicate success
}
};

template <class cT, class traits = std::char_traits<cT> >
class basic_onullstream: public std::basic_ostream<cT, traits> {
public:
basic_onullstream():
std::basic_ios<cT, traits>(&m_sbuf),
std::basic_ostream<cT, traits>(&m_sbuf)
{
init(&m_sbuf);
}

private:
basic_nullbuf<cT, traits> m_sbuf;
};

typedef basic_onullstream<char> onullstream;
typedef basic_onullstream<wchar_t> wonullstream;

int main() {
onullstream os;
os << 666;
}

关于c++ - 实现无操作 std::ostream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/760301/

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