如何使运算符<<重载以像ostream一样工作

0xBBC

我正在实现一个类,我想使用<<将一些参数传递给实例。

例如,

terminal term;
term << "Hello World!" << '\n';

代码如下

class terminal {
    template <typename T>
    terminal& operator << (T& t) {
        std::cout << t;
        return *this;
    }
};

基本上,我想成为一个流,而不是成为流的一部分。(不是cout <<术语;)

(很抱歉,我忘记指定我的问题了)。问题是,它可以很好地与字符串配合使用,但是如果有数字(如int,char等),则编译失败。

如果我们使用上面的示例,编译器将抱怨

无效的二进制二进制运算符(“ terminal”和“ int”)

101010

我将更改为以下内容,以使operator<<(例如term << "hello" << std::endl;)的排序工作:

namespace foo {

class terminal {    
  std::ostream &strm;
public:
  terminal(std::ostream &strm_) : strm(strm_) {}
  terminal() : strm(std::cout) {}

  template <typename T>
  friend std::ostream& operator<<(terminal &term, T const &t);
};

template <typename T>
std::ostream& operator<<(terminal &term, T const &t) {
  term.strm << t;
  return term.strm;
}

}

现场演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

* =运算符如何工作?

来自分类Dev

“&”运算符如何工作?

来自分类Dev

Perl6 hyper»运算符不能像地图一样工作

来自分类Dev

python运算符重载如何工作

来自分类Dev

运算符重载=,* =。如何使这项工作?

来自分类Dev

如何重载3D向量的ostream运算符?

来自分类Dev

如何快速重载赋值运算符

来自分类Dev

如何重载+ =“ plus equals”运算符?

来自分类Dev

如何正确重载+运算符

来自分类Dev

如何重载运算符==?

来自分类Dev

C ++:如何正确重载<运算符?

来自分类Dev

如何重载()运算符作为前缀?

来自分类Dev

如何重载WPF容器的运算符?

来自分类Dev

如何重载in中的运算符?

来自分类Dev

JavaScript的分组运算符如何工作?

来自分类Dev

'|'如何 运算符在R中工作?

来自分类Dev

<:<运算符在Scala中如何工作?

来自分类Dev

Ruby的。()运算符如何工作?

来自分类Dev

Erlang比较运算符如何工作?

来自分类Dev

按位运算符如何工作

来自分类Dev

如何:运算符在Javascript中工作

来自分类Dev

“ | =” PHP运算符如何工作?

来自分类Dev

Javascript:++运算符如何工作?

来自分类Dev

空结算运算符如何工作

来自分类Dev

jq-| =运算符如何工作?

来自分类Dev

Ruby的。()运算符如何工作?

来自分类Dev

Erlang比较运算符如何工作?

来自分类Dev

按位运算符如何工作?

来自分类Dev

Javascript左移运算符如何工作?