Self-referencing template parameters
Erik Rasmussen
i_am_erik at yahoo.com
Mon Mar 20 03:03:38 PST 2006
One way that I have found java's generics to be useful is in doing
something like this:
---
public abstract class Animal<T extends Animal<T>>
{
public abstract T[] procreate(T mate);
}
public class Monkey extends Animal<Monkey>
{
public Monkey[] procreate(Monkey mate)
{
// make sweet monkey love
}
}
---
Although you're not strictly forced to by the compiler, if you make it a
policy to always make your template variable the same as your concrete
subclass, then you have forced any class that extends Animal to provide
a way to "procreate" with its own kind.
I seem to be unable to implement this pattern in D. The following
doesn't work:
---
abstract class Animal(T : Animal!(T))
{
abstract T[] procreate(T mate);
}
---
It doesn't like that template definition on the first line. It says,
"template instance does not match any template declaration".
Any ideas?
Cheers,
Erik
More information about the Digitalmars-d-learn
mailing list