Short list with things to finish for D2

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed Nov 18 15:57:35 PST 2009


bearophile wrote:
> Andrei Alexandrescu:
> 
>> * Encode operators by compile-time strings. For example, instead of
>> the plethora of opAdd, opMul, ..., we'd have this:
>> 
>> T opBinary(string op)(T rhs) { ... }
>> 
>> The string is "+", "*", etc.
> 
> Can you show an example of defining an operator, like a minus, with
> that?

struct BigInt {
    BigInt opBinary(string op)(BigInt rhs) if (op == "-") {
       ...
    }
}

> In my set data structure I'd like to define "<=" among two sets as
> "is subset". Can that design allow me to overload just <= and >= ?
> (opCmp is not enough here).

It could if we decide to deprecate opCmp. I happen to like it; if you 
define a <= b for inclusion, people will think it's natural to also 
allow a < b for strict inclusion. But that's up for debate.

I'm not sure what the best way is. Classes have opEquals and opCmp so 
the question is - do we want structs to be somewhat compatible with 
classes or not? My personal favorite choice would be to go full bore 
with compile-time strings.


Andrei



More information about the Digitalmars-d mailing list