【问题标题】:How to check if an output stream is std::cout in C++?如何检查输出流是否是 C++ 中的 std::cout?
【发布时间】:2012-09-28 12:23:02
【问题描述】:

我正在实现一个输出流运算符

   friend std::ostream& operator<<(std::ostream& os, const Software &soft)

【问题讨论】:

  • 只是比较地址。但是……你为什么想要那个?
  • 你为什么还要为此重载operator&lt;&lt;?你为什么不写一个类似Print(const Software &amp;soft)的函数来输出到cout

标签: c++ exception stream cout


【解决方案1】:

我质疑那种会导致你认为你必须这样做的逻辑,但如果你真的想......

if (&os != &std::cout) {
    throw std::runtime_error(/* ... */);
}

【讨论】:

  • 原因是我有一个仅为标准输出定义的 C 实现,我正在为它创建一个 c++ 包装器。
  • 感觉还是应该采取不同的方法。使用代码可能会使用其他流调用此重载,这将编译得很好,即使它稍后会崩溃。通常,如果您必须强制某些参数是特定值,那么您做错了。让编译器尽可能地帮助你。
  • 您总是可以忽略os 参数并打印到std::cout
  • @rvalue 那会更糟。
  • @cdhowie 我不认为抛出 std::runtime_error 更好;你是对的,需要一种不同的方法。我认为 @benjamin-lindley 可能最接近使用 Print() 函数或方法。
猜你喜欢
  • 2015-08-21
  • 2011-11-24
  • 2020-08-15
  • 2013-09-11
  • 1970-01-01
  • 2011-02-06
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多