Operator overloading problem
Philippe Sigaud
philippe.sigaud at gmail.com
Fri Aug 6 14:16:17 PDT 2010
On Fri, Aug 6, 2010 at 22:37, div0 <div0 at sourceforge.net> wrote:
> Personally, I'm with you and I would expect that the compiler should
> example the function parameters after the template string parameter but it
> doesn't.
>
Yes :o(
You need to add a second template parameter for the function arguments and
add a template constrait like so:
> struct Group {
> int i1;
>
> Group opBinary(string op, U) (U x)
> if(op == "+" && is(U: int))
> {
> // do somehting
> return this;
> }
>
> Group opBinary(string op, U) (U rhs)
> if(op == "+" && is(U: Group))
> {
> // do something
> return this;
> }
> }
>
>
In some cases, you might factor things a bit:
Group opBinary(string op, U)(U u) if (op == "+")
{
common code for all U's;
static if (some test on U)
some code;
else
other code;
}
Maybe some code is common between the Group case and the int case. I'm not
sure it's more readable this way...
Philippe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20100806/26e481ef/attachment.html>
More information about the Digitalmars-d-learn
mailing list