【问题标题】:Templates c++ overloading multiple operators at once模板c ++一次重载多个运算符
【发布时间】:2014-02-10 15:06:30
【问题描述】:

我正在编写一个简单的模板,它将值存储在一个数组中,检查没有重复。

我重载了 [] 运算符,因此它可以像普通数组一样使用:

T operator [] (int index) { return _array[index]; }

但是如果我想直接更改值,那是行不通的,当然我可以编写一些 changeVal(int index, T value) 函数,但如果我可以使用 = 运算符来做到这一点会更好。我可以一次重载多个运算符吗?喜欢:

operator [] = (int index, T val) { _array[index] = val; }

这不适合我:有什么方法可以实现吗?

显然我是唯一一个想到这一点的傻瓜,或者答案可能只是隐藏在数百万个问题中的一些问题中,比如“重载运算符问题”这样的通用句子,但我不会用我的一生来浏览这些问题(确实已经很老了)。

非常感谢大家,祝你有美好的一天!!!

编辑:(见下面的评论) 即使我的主要问题得到解决,主要问题的答案 - 是否可能以及如何(即使有一些技巧或其他)仍然会受到赞赏 - 这肯定是质量信息!谢谢大家!!!

【问题讨论】:

  • [OT] :请注意,如果您可以通过 operator [] 更改值,则可能会破坏您在数组中的唯一性...
  • 非常好!我把检查放在一个 add(T e) 函数中,但是如果你说如果我使用 [] 来更改一个值,它可能也需要检查......所以最后我仍然需要以某种方式重载[] 和 = 一次,或者检测到 [] 重载用于更改值...有谁知道如何做到这一点???
  • operator [] 需要返回一个带有operator =代理 并隐式转换为const T&
  • 非常好,非常感谢!如果有人对所有这些进一步感兴趣,请在之前的评论中找到相关信息 herehere

标签: c++ templates operator-overloading


【解决方案1】:

如果您希望能够更改值,则需要返回一个引用:

T& operator [] (int index) { return _array[index]; }

习惯上也提供此运算符的const 版本:

const T& operator [] (int index) const { return _array[index]; }

这使您可以const 访问const 实例的元素。

【讨论】:

  • 傻我...感谢您的超快速回答(问题发布后不到一分钟)!!!
猜你喜欢
  • 1970-01-01
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 2023-03-03
  • 2015-09-15
相关资源
最近更新 更多