On Saturday, 20 July 2013 at 18:34:30 UTC, Jesse Phillips wrote:
On Saturday, 20 July 2013 at 16:46:52 UTC, JS wrote:
class MyClass {
auto opBinary(string op : "|" T : int)(T t) { }
// opBinary is completely specialized and is no
different than a regular function, it can be overridden
directly in children without having to use a redirection.
(note in your opBinaryImpl, T must be specified
}
I understand there is a little boilerplate when wanting to have
overriding for the operator overloads, but I don't see much
gain from the proposal.
Do you really want to force people to write
int opBinary(string op : "|" T : int)(T t)
instead of
override int opOr(int t)
when trying to override your function?
well, I see your point but it is less verbose AND if they want to
allow the same op in there class, which they probably do, they
have to override the long hand anyways and redirect. So all in
all I think the long hand is better(more consistent with
"previous practices").
Though it might be interesting if an aliased function could be
overridden:
class I {
final int opBinary(string op)(int t) { ... }
alias opAdd = opBinary!"+";
}
class MyClass : I{
override int opAdd(int v) { ... }
}
I think this would be better. This way either choice could be
used but there is no extra redirection that takes place(well,
through the alias but that is symbolic).