opIndexAssign在C++中是否可行?

4 c++ d

所述d编程语言版本2具有极好的方法过载像这样的表达式:

classInstance[someName] = someValue;
Run Code Online (Sandbox Code Playgroud)

或者作为这个小例子中定义的D函数:

ref Map opIndexAssign(ref const(ValueT) value, ref const(NameT) name)
{
    this.insert(name, value);
    return this;
}
Run Code Online (Sandbox Code Playgroud)

这在C++中是否可行(理想情况下不使用STL)?如果是这样,怎么样?

Jer*_*ock 8

通常,您将使用代理对象作为返回类型operator[]; 该对象将定制自operator=定义.vector<bool>C++标准库中的专门化使用代理来获取您正在寻找的行为.但是,基于代理的解决方案并不像D版本那样透明.代码类似于:

class proxy;

class my_map {
  public:
  proxy operator[](const key_type& k);
  // Rest of class
};

class proxy {
  my_map& m;
  key_type k;
  friend class my_map;
  proxy(my_map& m, const key_type& k): m(m), k(k) {}

  public:
  operator value_type() const {return m.read(k);}
  proxy& operator=(const value_type& v) {m.write(k, v); return *this;}
};

proxy my_map::operator[](const key_type& k) {
  return proxy(*this, k);
}
Run Code Online (Sandbox Code Playgroud)