struct A{
int[3] _data;
ref int opIndex(size_t i) { return _data[i]; }
int opIndex(size_t i) const{ return _data[i]; }
}
T fun(T)(const ref T a){
T ai = a;
swap(ai[0], ai[1]); // error
return ai;
}
immutable A a = A();
immutable A b = fun(a);
void main(){ }
上面的代码给出了以下错误:
Error: ai.opIndex(0LU) is not an lvalue
Error: ai.opIndex(1LU) is not an lvalue
called from here: fun(a)
ai
是a
的副本,它是左值,所以我不明白为什么会收到错误。
答案 0 :(得分:2)
您需要使用opIndexAssign
代替opIndex进行分配,而不是ref int opIndex(size_t i)
使用int opIndexAssign(int value, size_t i)
。
您可以在此处找到更多信息:Operator Overloading
修改强>
import std.algorithm;
struct A{
int[3] _data;
ref int opIndex(size_t i) { return _data[i]; }
}
T fun(T)(){
T ai;
// swap(ai._data[0], ai._data[1]);
swap(ai[0], ai[1]);
return ai;
}
immutable A a = A();
immutable A b = fun!(A);
void main(){ }