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)?如果是这样,怎么样?
通常,您将使用代理对象作为返回类型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)