On Thursday, 19 April 2012 at 20:59:05 UTC, Jonathan M Davis wrote:
On Thursday, April 19, 2012 21:14:43 Xan wrote:
Hi, I read http://dlang.org/operatoroverloading.html but in my
code it does not work. I tried to overload '*' binary operator in
my class Algorisme:

[...]
class Algorisme(U,V) {
string nom;
uint versio;
alias V function (U) Funcio;
Funcio funcio;

this(string nom, uint versio, Funcio funcio) {
try {
this.nom = nom;
this.versio = versio;
this.funcio = funcio;
}
catch {
writeln("Error");
}
}

string toString() {
return format("%s (versió %s): %s -> %s", nom, versio,
typeid(U), typeid(V));
}

Algorisme(U, V) opBinary(string op) (Algorisme(U, V) alg) {
static if (op == '*') return new Algorisme(U,V)("composició",
this.versio+alg.versio, this.funcio);
}

}
[...]

but I receive these errors:

$ gdmd-4.6 algorisme.d
algorisme.d:31: function declaration without return type. (Note
that constructors are always named 'this')
algorisme.d:31: no identifier for declarator Algorisme(U, V)
algorisme.d:31: semicolon expected following function declaration
algorisme.d:31: function declaration without return type. (Note
that constructors are always named 'this')
algorisme.d:31: function declaration without return type. (Note
that constructors are always named 'this')
algorisme.d:31: found 'alg' when expecting ')'
algorisme.d:31: no identifier for declarator
opBinary(Algorisme(U, V))
algorisme.d:31: semicolon expected following function declaration
algorisme.d:31: Declaration expected, not ')'
algorisme.d:35: unrecognized declaration


Why it fails?
Anyone could help me?

Use a template constraint rather than a static if. As it stands, any operator other than "*" will result in a function with no return statement.

Algorisme opBinary(string op)(Algorisme alg)
 if(op == "*")
{
return new Algorisme("composició", this.versio+alg.versio, this.funcio);
}

- Jonathan M Davis

Thanks, Jonathan. I suppose with 'if' (dynamic), it generates Exception if we call with other operator than '*', isn't?

Thanks,
Xan.

Reply via email to