c++ - 类的自定义流操纵器

标签 c++ stream manipulators

我正在尝试编写一个简单的审计类,它通过运算符 << 获取输入并在收到这样的自定义操纵器后编写审计:

class CAudit
{
public:
    //needs to be templated
    CAudit& operator << ( LPCSTR data ) {
        audittext << data;
        return *this;
    }

    //attempted manipulator
    static CAudit& write(CAudit& audit) { 
        //write contents of audittext to audit and clear it
        return audit; 
    }

private:
    std::stringstream audittext;
};

//to be used like
CAudit audit;
audit << "Data " << data << " received at " << time << CAudit::write;

我认识到我代码中的重载运算符不会返回流对象,但想知道是否仍然可以使用类似操纵器的语法。目前,编译器将“<<”视为二进制右移运算符。

感谢您的任何输入, 帕特里克

最佳答案

要使其工作,您必须为函数添加运算符 << 的重载, 而不是从中调用函数:

 class CAudit
 {
  //...other details here as in original question

  CAudit& operator << (CAudit & (*func)(CAudit &))
  {
        return func(*this);
  }
 };

 CAudit audit;
 audit << "some text" << CAudit::write;

关于c++ - 类的自定义流操纵器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1328568/

相关文章:

java - Akka stream - 在不引入延迟的情况下限制流量

c++ - 将 std::left 作为参数传递

c++ - 输出操纵器 std::ends 是否将 Null 字符添加到输出缓冲区?

c++ - 如何在 qt4 设计器中创建自定义插槽?

C++ #include 导致 'duplicate symbols'

c++ - 无效的数组分配

c++ - 使用 fstream 将文件读入单独的变量最有效

opengl - RenderMonkey 在 GLSL 的 TEXCOORD 流映射中是否有错误?

c++ - std::function 作为自定义流操纵器

Android 如何在 Android 2.3 及更高版本的 MediaPlayer 中播放 Shoutcast AAC、AAC+、MP3?