binary expression...
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat May 21 16:06:10 PDT 2016
On 05/21/2016 12:56 PM, captain_fid wrote:
> On Saturday, 21 May 2016 at 18:33:53 UTC, Anonymouse wrote:
>> On Saturday, 21 May 2016 at 18:10:55 UTC, captain_fid wrote:
>>> Please forgive if asked before. My google skills seemed to fail me
>>> and didn't see any result from search.
>>>
>>> My problem is simple (though not my understanding LOL).
>>>
>>> struct D {
>>> int value;
>>> bool opEquals()(bool value) const { return (value == value); }
>>> }
>>>
>>> D aD;
>>> if (aD == 1) { // OK
>>> }
>>>
>>> if (aD) { // Error: expression aD of type D does not have a
>>> boolean value
>>> }
>>>
>>> Is there a way to overload for this? What am I missing?
>>
>> struct D
>> {
>> int value;
>>
>> bool opEquals(T)(T value) const {
>> return value == this.value;
>> }
>>
>> bool opCast(T : bool)() const {
>> return this != this.init; // or some such
>> }
>> }
>>
>> Not tested, written on my phone so might have missed something.
>
> Perfect.. and your 'phoned-in' coding is impressive.
>
> opCast is the biggest thing I was missing/forgetting/misunderstanding
here.
opCast is for explicit type conversions. However, you seem to want
implicit type conversions.
> I Still need to look back at what is happening with vit's solution.
vit's 'alias ... this' solution is it. Here is some for info:
http://ddili.org/ders/d.en/alias_this.html
And here is another example if you want the 'bool' value to be
calculated as opposed to being a member:
struct S {
int x;
int y;
/* Implicit type conversion to 'bool'
* (Because myBoolValue() returns 'bool'.) */
alias myBoolValue this;
bool myBoolValue() {
return (x + y) == 7; // Some special condition
}
}
void main() {
auto a = S(1, 2);
auto b = S(3, 4);
assert(!a); // Calls a.myBoolValue()
assert( b); // Calls b.myBoolValue()
}
Ali
More information about the Digitalmars-d-learn
mailing list