c++ - 如何使用下标运算符中分配的值来做一些事情?

标签 c++ arrays operator-overloading

假设我有数据数组 0,0,1,1,2,2,5,5,7,7,2,2 作为类中的数据成员,我想在其中定义下标运算符

[i] 返回数组的 2*i 个元素,但我也想让用户设置元素,所以

[i] = n,必须应用于 2*i 和 2*i+1。

是否可以通过仅向用户显示下标运算符来做到这一点?

0,0,1,1,2,2,5,5,7,7,2,2
[3] = 4;
0,0,1,1,2,2,4,4,7,7,2,2

另一种解决方法?并且通常它可能不仅是两个元素。

最佳答案

间接地,是的。

您可以返回一个带有下标运算符的专用类型,它基本上像仿函数一样工作,并根据您的规范负责分配值:

struct AssignFunctor {
  MyArrayType& parent;
  size_t index;
  AssignFunctor(MyArrayType& parent, size_t index) : parent(parent), index(index) {}
  AssignFunctor& operator=(int k) {
    parent.set(index,k);
    parent.set(index*2,k);
  }
  operator int() const {
    return parent.get(index);
  }
};

struct MyArrayType {
  AssignFunctor operator[](size_t index) {
    return AssignFunctor(*this,index);
  }
  int operator[](size_t index) const {
    return get(index);
  }
  void set(size_t,int);
  int get(size_t) const;
};

关于c++ - 如何使用下标运算符中分配的值来做一些事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12249565/

相关文章:

java - 在游戏中创建 NPC 数组

c# - 我如何在隐式运算符中使用泛型?

c++ - 在头文件上为类声明 = 和 [] 运算符, "must be a nonstatic member function"错误

c# - 在 C# 中重载 [][]

c++ - C++从文件中读取数据

c++ - 引用计数

c++ - 分配顺序与初始化顺序

C++ C4244 =': conversion from ' std::streamsize' 到 'unsigned short' ,可能丢失数据;任何解决方案?

php - 检查数组值是否存在于 mysql 表中

arrays - 如何找到最近的N个网格点(贪心)