2011-08-07 12 views
5

Códigooperador de negación unaria sobrecarga en 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; 
} 

Error de compilación

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

http://ideone.com/Kec81

también probado en DMD 2.053, 2.054

¿Qué hay de malo en mi código?

Respuesta

3

No puede sobrecargar el operador ! en D - consulte http://www.d-programming-language.org/operatoroverloading.html#Unary para obtener una lista de operadores únicos cargables. Sin saber lo que está haciendo, es difícil sugerir una solución, podría valer la pena mirar alias this - http://www.d-programming-language.org/class.html#AliasThis.

+2

Gracias. Parece que tienes razón. Este es un ejemplo de The D Programming Language. Parece que necesito sobrecargar el molde (bool) en su lugar. – Stas

+2

Tenga en cuenta que faltan todos los operadores lógicos. IIRC que es intencional. – BCS