• <bdo id='vcpar'></bdo><ul id='vcpar'></ul>
  1. <small id='vcpar'></small><noframes id='vcpar'>

      <tfoot id='vcpar'></tfoot>
      <legend id='vcpar'><style id='vcpar'><dir id='vcpar'><q id='vcpar'></q></dir></style></legend>
      <i id='vcpar'><tr id='vcpar'><dt id='vcpar'><q id='vcpar'><span id='vcpar'><b id='vcpar'><form id='vcpar'><ins id='vcpar'></ins><ul id='vcpar'></ul><sub id='vcpar'></sub></form><legend id='vcpar'></legend><bdo id='vcpar'><pre id='vcpar'><center id='vcpar'></center></pre></bdo></b><th id='vcpar'></th></span></q></dt></tr></i><div id='vcpar'><tfoot id='vcpar'></tfoot><dl id='vcpar'><fieldset id='vcpar'></fieldset></dl></div>

      如何像 std C++ 流一样使用我的日志记录类?

      时间:2024-08-13
        <bdo id='lgHED'></bdo><ul id='lgHED'></ul>
        • <legend id='lgHED'><style id='lgHED'><dir id='lgHED'><q id='lgHED'></q></dir></style></legend>
        • <small id='lgHED'></small><noframes id='lgHED'>

          <tfoot id='lgHED'></tfoot>

          <i id='lgHED'><tr id='lgHED'><dt id='lgHED'><q id='lgHED'><span id='lgHED'><b id='lgHED'><form id='lgHED'><ins id='lgHED'></ins><ul id='lgHED'></ul><sub id='lgHED'></sub></form><legend id='lgHED'></legend><bdo id='lgHED'><pre id='lgHED'><center id='lgHED'></center></pre></bdo></b><th id='lgHED'></th></span></q></dt></tr></i><div id='lgHED'><tfoot id='lgHED'></tfoot><dl id='lgHED'><fieldset id='lgHED'></fieldset></dl></div>

                <tbody id='lgHED'></tbody>
                本文介绍了如何像 std C++ 流一样使用我的日志记录类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                我有一个工作记录器类,它将一些文本输出到富文本框(Win32,C++)中.问题是,我总是这样使用它:

                I've a working logger class, which outputs some text into a richtextbox (Win32, C++). Problem is, i always end up using it like this:

                stringstream ss;  
                ss << someInt << someString;  
                debugLogger.log(ss.str());
                

                相反,像使用流一样使用它会方便得多:

                instead, it would be much more convenient to use it like a stream as in:

                debugLogger << someInt << someString;
                

                有没有比将所有内容转发到内部字符串流实例更好的方法?如果这样做,我什么时候需要冲洗?

                Is there a better way than forwarding everything to an internal stringstream instance? If'd do this, when would i need to flush?

                推荐答案

                您需要为您的班级适当地实施 operator <<.一般模式如下所示:

                You need to implement operator << appropriately for your class. The general pattern looks like this:

                template <typename T>
                logger& operator <<(logger& log, T const& value) {
                    log.your_stringstream << value;
                    return log;
                }
                

                请注意,这会处理(非const)引用,因为该操作会修改您的记录器.另请注意,您需要返回 log 参数才能使链接正常工作:

                Notice that this deals with (non-const) references since the operation modifies your logger. Also notice that you need to return the log parameter in order for chaining to work:

                log << 1 << 2 << endl;
                // is the same as:
                ((log << 1) << 2) << endl;
                

                如果最里面的操作没有返回当前的 log 实例,所有其他操作要么在编译时失败(错误的方法签名)要么在运行时被吞没.

                If the innermost operation didn't return the current log instance, all other operations would either fail at compile-time (wrong method signature) or would be swallowed at run-time.

                这篇关于如何像 std C++ 流一样使用我的日志记录类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                上一篇:从输入迭代器创建 C++ std::string 的性能 下一篇:c++ - 从C++中的istream对象读取时如何检测空行?

                相关文章

                  <bdo id='o6o6m'></bdo><ul id='o6o6m'></ul>
              • <small id='o6o6m'></small><noframes id='o6o6m'>

                1. <i id='o6o6m'><tr id='o6o6m'><dt id='o6o6m'><q id='o6o6m'><span id='o6o6m'><b id='o6o6m'><form id='o6o6m'><ins id='o6o6m'></ins><ul id='o6o6m'></ul><sub id='o6o6m'></sub></form><legend id='o6o6m'></legend><bdo id='o6o6m'><pre id='o6o6m'><center id='o6o6m'></center></pre></bdo></b><th id='o6o6m'></th></span></q></dt></tr></i><div id='o6o6m'><tfoot id='o6o6m'></tfoot><dl id='o6o6m'><fieldset id='o6o6m'></fieldset></dl></div>
                2. <legend id='o6o6m'><style id='o6o6m'><dir id='o6o6m'><q id='o6o6m'></q></dir></style></legend>
                    <tfoot id='o6o6m'></tfoot>