Templated operator overloading
aliak
something at something.com
Wed Aug 22 13:20:01 UTC 2018
On Wednesday, 22 August 2018 at 11:58:25 UTC, XavierAP wrote:
> I've been trying some things to template operator overloads.
> The reason is that I want very similar code for different
> types, but I can't use polymorphism, as they're structs rather
> than classes. Perhaps this choice is not as advantageous as I
> think, and I may change this design from structs to classes, or
> else the code duplication would be small and never subject to
> change. But now I'm just trying for the sake of learning to
> find out what works or not in terms of templated operator
> overloading, and whether the reason something doesn't work is
> by design and if mentioned in the specification, or just an
> arbitraty result of some unspecified parsing/lowering step
> order, or it depends on the compiler (I'm using dmd).
>
> [...]
"void opOpAssign(string op, T)(ref Tthis, const ref T x)" looks
like the wrong signature for opOpAssign. THink it needs to be:
void opOpAssign(string op, T)(const ref T x)
Then:
mixin template operator!
{
void opOpAssign(string op, T)(const ref T x)
{
writeln(this, op, x);
}
}
struct S1
{
mixin operator;
}
struct S2
{
mixin operator;
}
Cheers,
- Ali
More information about the Digitalmars-d-learn
mailing list