2011-08-07 31 views
5

unary nhà điều hành phủ định quá tải trong 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; 
} 

Compilation lỗi

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

http://ideone.com/Kec81

Ngoài ra thử nghiệm trên DMD 2,053, 2,054

Có gì sai với mã của tôi?

Trả lời

3

Bạn không thể quá tải toán tử ! trong D - xem http://www.d-programming-language.org/operatoroverloading.html#Unary để biết danh sách các toán tử đơn nguyên quá tải. Nếu không biết bạn đang làm gì, thật khó để đề xuất một công việc xung quanh, nó có thể là giá trị nhìn vào alias this mặc dù - http://www.d-programming-language.org/class.html#AliasThis.

+2

Cảm ơn. Có vẻ như bạn đã đúng. Đây là một ví dụ từ Ngôn ngữ lập trình D. Có vẻ như tôi cần phải quá tải cast (bool) thay thế. – Stas

+2

Lưu ý rằng tất cả các toán tử logic đều bị thiếu. IIRC đó là cố ý. – BCS

Các vấn đề liên quan