我想重载运算符<<将元素添加到列表中。
std::list<int> foo (3,100); // three ints with a value of 100
如果我输入
foo << 2 << 3 << 4;
然后列表变为100,100,100,2,3,4。 我知道有很多功能可以做这个实现,现在我正在学习运算符重载,所以我很好奇是否可以这样做,如果是的话怎么做? (我想使用&lt;&lt;来添加元素,不需要cout。)
答案 0 :(得分:2)
你表面上会写这样的功能(Tested on Ideone.com):
template<typename T>
std::list<T> & operator<<(std::list<T> & list, T val) {
list.emplace_back(std::move(val));
return list;
}
所以唯一突出的问题是你想或需要这样做,我认为答案是你不应该和不, 以该顺序。通常最好不要尝试修改/添加STL容器的默认行为,因为这样做会导致意外行为。
如果你想要一个可以用这种语法插入的列表,至少你应该自己动手(你可以使用std::list
作为后备数据结构,以节省必须编写样板代码)这样就不会混淆STL容器在代码中的行为方式。
因为我知道在这一点上会有一些混乱:用户覆盖流的<<
运算符是相当常见的。这不被认为是不好的做法的原因是std::ostream
已经对许多对象(基本类型和库对象)都有<<
重载,并且重载{{1}更自然这个对象类比容器对象。当然,所有这些都取决于个人情况。