通用打印功能

时间:2011-10-29 22:48:02

标签: c++ operator-overloading iostream

我手边没有好的C ++书籍,google也没什么用处。

这是如何工作的?从概念上讲,这里发生了什么?从技术上讲,是运算符<<()预定义的原型,这个作者如何知道如何编写它以便<<是否重载输出容器值?

我可以在哪里查看operator<<()以便我可以超载它?

同样对于输入,您需要一个开头和结尾“地点”c.begin()c.end() ...但是对于输出,您需要一个“地点”ostream_iterator。这似乎有点不对称。

template <typename Container> 
std::ostream& operator<<(std::ostream& os, const Container& c) 
{ 
    std::copy(c.begin(), c.end(),  
              std::ostream_iterator<typename Container::value_type>(os, " ")); 
    return os; 
}

1 个答案:

答案 0 :(得分:1)

这很模糊,但我会试一试:

  

从技术上讲,是运算符&lt;&lt;()预定义的原型,它的作者如何知道如何编写它以便&lt;&lt;是否重载输出容器值?

     

我在哪里可以查看运算符&lt;&lt;()以便我可以重载它?

您可以为所有尚未过载的用户定义类型重载运算符。有关详细信息,请参阅here

  

同样对于输入,你需要一个开始和结束“地点”c.begin(),c.end()...但是对于输出你需要一个“地方”ostream_iterator。这似乎有点不对称。

将此视为一个问题......
这就是如何定义std::copy():它需要一个输入范围(由开始和结束迭代器定义),以及一个输出迭代器,用于写入的位置。它假定,无论它写在哪里,都有足够的空间。 (如果您使用输出流操作符,则总是有足够的空间。)

你可能想要自己a good C++ book