[疑难] opAssign 错误
hurd
2008-05-20
提示:
dwt\custom\styledtexthelper.d(134): function dwt.custom.styledtexthelper.RANGE.opAssign identity assignment operator overload is illegal struct RANGE{ int Position; int Length; void opAssign(RANGE r){ this.Position = r.Position; this.Length = r.Length; } int opIndex(int i1) {assert(i1<2); return (i1==0 ? Position : Length); }; int opIndexAssign(int value, int i1) { assert(i1<2); if(i1==0) Position = value; else Length = value; return value; }; } 尝试用dmd 1.030编译 Shawn Dwt, 提示这个错误, |
|
oldrev
2008-05-20
opAssign 的参数不能为 typeof(this) 或者可隐式转换为 typeof(this),语言文档里有明确说明
|
|
hurd
2008-05-20
如果不能用typeof(this),这里应该怎样处理呢?
他opAssign,应该接受和自己一样的类型啊。 |
|
Colorful
2008-05-21
用其他的类型来赋值。
opAssign挺有意思,按照常规思维,它应该同类型之间赋值。但这在D中行不通,它只允许其他的类型。然而这对于客户程序来说,压根不好理解,而且必须仔细查看文档才能知道到底什么类型才能对其赋值,万一重载很多,文档又不咋地,就更有意思了。 所以在D2.0中,直接废掉这个功能,不再允许重载opAssign。 |
|
dogstar
2008-05-21
D什么时候语言特性才能稳定下来,然后结结实实的打造标准库.java能够取得成功,在很大程度上取决于其标准库.
|
|
oldrev
2008-05-21
hurd 写道 如果不能用typeof(this),这里应该怎样处理呢?
他opAssign,应该接受和自己一样的类型啊。 直接去掉 opAssign 就可以了,由编译器处理 |