2011-08-07 15 views
5

KodeksuJednoargumentowy operator negacji przeciążenia 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; 
} 

błąd Kompilacja

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

http://ideone.com/Kec81

testowano również na DMD 2.053, 2.054

Co się dzieje z mojego kodu?

Odpowiedz

3

Nie można przeciążać operatora ! w D - patrz http://www.d-programming-language.org/operatoroverloading.html#Unary, aby wyświetlić listę przeciążalnych operatorów jednoargumentowych. Nie wiedząc, co robisz, ciężko jest zasugerować pracę, warto jednak spojrzeć na: alias this - http://www.d-programming-language.org/class.html#AliasThis.

+2

Dzięki. Wygląda na to, że masz rację. To jest przykład z języka programowania D. Wydaje się, że potrzebuję zamiast tego przeładować rzut (bool). – Stas

+2

Należy pamiętać, że brakuje wszystkich operatorów logicznych. IIRC, który jest zamierzony. – BCS

Powiązane problemy