重定向C++ fstream

cbi*_*izz 0 c++ io fstream stream

所以我有一个C++程序,通常在它执行时将事物写入日志文件.这是使用fstream完成的.但是,现在我想要包含关闭日志记录的功能.基本上,我的代码看起来像这样:

bool isLogging;
fstream* logFilePtr;
Run Code Online (Sandbox Code Playgroud)

在我的代码中,有一堆语句如:

(*logFilePtr) << "    Kernel call time in seconds: " << kTime << endl;
...
Run Code Online (Sandbox Code Playgroud)

现在,如果"isLogging"为真,我不希望这些打印.我可以用一堆if语句围绕它们,但我更喜欢比这更清洁的东西.我认为有一些方法可以采用C++流并将其重定向到"无",以便在使用<<运算符时,不会打印任何内容.

有谁知道如何重定向流,或有任何其他想法如何以优雅的方式处理这个?

谢谢,科林

edu*_*ffy 6

你可以将它包装在一个类中.

class Log {
  Log (fstream &s) : stream(s), enabled(false) { }
  void Enable () { enabled = true; }
  void Disable () { enabled = false; }

  template<class T>
  Log &operator<< (T const& rhs) {
    if (enabled) stream << rhs;
    return *this;
  }

private:
  fstream &stream;
  bool enabled;
};
Run Code Online (Sandbox Code Playgroud)

这没有经过测试..但基本的想法应该在那里.