equivariant functions
Steven Schveighoffer
schveiguy at yahoo.com
Tue Oct 14 18:44:22 PDT 2008
"Denis Koroskin" wrote
> Now that I thought about it a little more (please, see and comment my post
> about typeof(this) nearby), I agree that the issues are related.
>
> However, the best solution could be a combination of both.
>
> For example, I agree that interface IClonable should be as follows:
>
> interface IClonable { typeof(this) clone() const; }
No. IClonable should be:
IClonable clone() const;
or if you prefer:
Object clone() const;
It can't be anything else, because IClonable cannot define how many levels
deep it goes.
For example, if I have:
class A : IClonable
{
typeof(this) clone() const { return new A();}
}
class B : A
{
}
B b = new B;
B x = b.clone();
Oops, b.clone() really only returns A, so this should fail. The real
signature in A should be:
class A : IClonable
{
A clone() const { return new A(); }
}
IClonable is a perfect candidate for covariant functions, which is already
defined.
-Steve
More information about the Digitalmars-d
mailing list