May 30, 2013 Re: and/or/not/xor operators | ||||
---|---|---|---|---|
| ||||
On 2013-05-30, 13:56, Shriramana Sharma wrote: > Hello. I have always loved the readability of C++'s and/or/not/xor > word-like logical operators but It doesn't seem to be available in D. > Isn't this possible in D? I tried doing: > > alias && and ; > import std.stdio ; > void main () { > writeln ( true and true ) ; > } > > but I get errors: > > $ dmd foo.d > foo.d(1): Error: basic type expected, not && > foo.d(1): Error: no identifier for declarator int > foo.d(1): Error: semicolon expected to close alias declaration > foo.d(1): Error: Declaration expected, not '&&' > foo.d(7): Error: found 'and' when expecting ', > > Thanks. While that's not possible, D's operator overloading allows you to implement it yourself: struct And { struct AndImpl { private bool payload; this( bool value ) { payload = value; } bool opBinary(string op : "/")(bool value) const { return payload && value; } } AndImpl opBinaryRight(string op : "/")(bool value) { return AndImpl( value ); } } struct Or { struct OrImpl { private bool payload; this( bool value ) { payload = value; } bool opBinary(string op : "/")(bool value) const { return payload || value; } } OrImpl opBinaryRight(string op : "/")(bool value) { return OrImpl( value ); } } And and; Or or; void main( ) { assert( true /and/ true ); assert( true /or/ false ); } Of course, if you ever use this, watch out for the flood of WTFs and curse words. -- Simen |
Copyright © 1999-2021 by the D Language Foundation