how to properly overload function templates?
bearophile
bearophileHUGS at lycos.com
Thu Mar 11 17:55:51 PST 2010
Trass3r:
> Of course this can be circumvented by using
> opBinary(string op, U:Vector2)(U v)
> opBinary(string op, U:int)(U v)
>
> But is this how it's supposed to be done? Couldn't the compiler detect
> that itself?
The compiler can probably do that by itself, but to do that I think templates need to change a little how they work.
That code doesn't look too much bad, I think it's acceptable. You can also use template constraints, but the code gets a little worse:
opBinary(string op, T)(T v) if (is(T == Vector2) {
opBinary(string op, T)(T v) if (is(T == int) {
Or you can squash it in a single template, but I think it's worse:
opBinary(string op, T)(T v) {
static if (is(T == Vector2) {
...
} else static if (is(T == int) {
...
} else
assert(0, "...");
}
Bye,
bearophile
More information about the Digitalmars-d-learn
mailing list