c++ - 如何控制运算符[]分配的值

标签 c++ operator-overloading operator-keyword

我知道如何重载 operator[] 如下:

T& operator [](int idx) {
    return TheArray[idx];
}

T operator [](int idx) const {
    return TheArray[idx];
}

但我想要的是控制arr[i] = value赋值。 我想控制值在 0 到 9 之间。 有什么语法可以这样做吗?

最佳答案

您必须编写一个模板类来保存对数组(T 类型)中元素的引用,在该模板中您实现赋值运算符,然后您可以在其中实现您的检查。然后从 [] 运算符返回此模板类的对象。

像这样:

template< typename T> class RangeCheck
{
public:
   RangeCheck( T& dest): mDestVar( dest) { }
   RangeCheck& operator =( const T& new_value) {
      if ((0 <= new_value) && (new_value < 9)) {  // <= ??
         mDestVar = new_value;
      } else {
         ... // error handling
      }
      return *this;
   }
private:
   T&  mDestVar;
};

关于c++ - 如何控制运算符[]分配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43067251/

相关文章:

c++ - FlannBasedMatcher::match 中的掩码无法正常工作

c++ - 检查参数包是否包含类型

c++ - 递归 vector 模板

c# - 对于运算符重载,C# 编译器如何决定哪个实现适用于混合类型的操作数?

c++ - 如何从 argv[] 获取元素

c++ - 为类层次结构重载 operator== 的正确方法是什么?

c++ - 结构的比较运算符重载,对称地将我的结构与 int 类型进行比较?

Python 的逻辑运算符 AND

c++ - 在 C++ 中扩展运算符重载

c++ - C++中所有非成员函数指针的大小是否相同