D中的一元否定运算符重载

时间:2011-08-07 18:28:54

标签: operator-overloading d

代码

struct test
{
   private real value;

   this(real value)
   {
      this.value = value;
   }

   bool opUnary(string op)() if (op == "!")
   {
      return !value;
   }
}

void main()
{
   test a = 123.12345;
   bool b = !a;
}

编译错误

prog.d(19): Error: expression a of type test does not have a boolean value

http://ideone.com/Kec81

也在dmd 2.053,2.054

上测试

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:3)

您不能在D中重载!运算符 - 请参阅http://www.d-programming-language.org/operatoroverloading.html#Unary以获取可重载的一元运算符列表。如果不知道你在做什么,很难建议一个解决方案,可能值得看看alias this - http://www.d-programming-language.org/class.html#AliasThis