covariance, operator overloads, and interfaces
Steven Schveighoffer
schveiguy at yahoo.com
Tue May 11 06:33:38 PDT 2010
The situation with interfaces and operators is getting worse and worse as
I try to implement it.
Here is another issue I have found.
Previously in dcollections, I support the ~ operator on Lists.
The relevant interface looked something like this:
interface List
{
List opCat(List rhs);
}
So something like an array list would use covariance to make the syntax
sugar more pleasant:
class ArrayList : List
{
ArrayList opCat(List rhs);
}
Now, you can do things like this:
ArrayList al, al2;
al = al ~ al2;
Fine and dandy. However, with the new operator overloading scheme, I must
define the operator as follows:
interface List
{
List concat(List rhs);
List opBinary(string op)(List rhs) if (op == "~")
{
return concat(rhs);
}
}
But now I lose covariance, the above usage no longer compiles.
I don't know how to solve this without dropping interfaces, or repeating
the template in all derived classes.
-Steve
More information about the Digitalmars-d
mailing list