2011-08-07 10 views
5

संहिता में अधिक भार ऑपरेटरएकल निषेध डी

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

इसके अलावा डीएमडी 2.053 पर परीक्षण किया, 2,054

क्या मेरी कोड के साथ गलत क्या है?

उत्तर

3

आप डी 12 में ! ऑपरेटर को अधिभारित नहीं कर सकते हैं - http://www.d-programming-language.org/operatoroverloading.html#Unary ओवरलोड करने योग्य यूनरी ऑपरेटरों की सूची के लिए देखें। यह जानने के बिना कि आप क्या कर रहे हैं, चारों ओर एक काम का सुझाव देना मुश्किल है, हालांकि alias this पर यह देखने लायक हो सकता है - http://www.d-programming-language.org/class.html#AliasThis

+2

धन्यवाद। ऐसा लगता है कि आप सही हैं। यह डी प्रोग्रामिंग भाषा से एक उदाहरण है। ऐसा लगता है कि मुझे इसके बजाय कास्ट (बूल) अधिभारित करने की आवश्यकता है। – Stas

+2

ध्यान दें कि सभी लॉजिकल ऑपरेटर गायब हैं। आईआईआरसी जानबूझकर है। – BCS