digitalmars.D.learn - Template in interface ?
- TSalm <TSalm free.fr> Feb 28 2009
- Christopher Wright <dhasenan gmail.com> Feb 28 2009
- TSalm <TSalm free.fr> Mar 01 2009
- Christopher Wright <dhasenan gmail.com> Mar 01 2009
Hello,
I need to do something like this :
/* ---- CODE ---- */
import tango.io.Stdout;
interface I
{
bool cmpType(U)(U val);
}
class A(T):I
{
bool cmpType(U)(U val)
{
static if ( is (U==T) )
return true;
else
return false;
}
}
void main()
{
I a = new A!(int);
int tInt = 10;
double tDouble = 20;
float tFloat = 30;
a.cmpType(tInt);
a.cmpType(tDouble);
a.cmpType(tFloat);
}
/* ---END CODE ---- */
But it's not allow by the compiler when there's no problem when change the
line:
I a = new A!(int);
By
A a = new A!(int);
:-(
Does something have an idea on how to do something like this ?
Thanks in advance,
Tsalm
Feb 28 2009
TSalm wrote:Does something have an idea on how to do something like this ?
You don't. Templates cannot participate in polymorphism. I've dealt with this in the past and ended up making another class with a template parameter that corresponds to the desired function template parameter... Basically, you change: interface IFoo { void method(T)(T t); } to: interface IFoo(T) { void method(T t); } This only works in some situations.Thanks in advance, Tsalm
Feb 28 2009
Le Sun, 01 Mar 2009 03:07:16 +0100, Christopher Wright <dhasenan gmail.com> a écrit:TSalm wrote:Does something have an idea on how to do something like this ?
You don't. Templates cannot participate in polymorphism. I've dealt with this in the past and ended up making another class with a template parameter that corresponds to the desired function template parameter... Basically, you change: interface IFoo { void method(T)(T t); } to: interface IFoo(T) { void method(T t); } This only works in some situations.
for which the calling code doesn't know the type of the "template-class" to call this method. It's why I tried to use an Interface.
Mar 01 2009
TSalm wrote:Le Sun, 01 Mar 2009 03:07:16 +0100, Christopher Wright <dhasenan gmail.com> a écrit:TSalm wrote:Does something have an idea on how to do something like this ?
You don't. Templates cannot participate in polymorphism. I've dealt with this in the past and ended up making another class with a template parameter that corresponds to the desired function template parameter... Basically, you change: interface IFoo { void method(T)(T t); } to: interface IFoo(T) { void method(T t); } This only works in some situations.
for which the calling code doesn't know the type of the "template-class" to call this method. It's why I tried to use an Interface.
The remaining way: void methodThatUsesTemplateOnAClass(Class)(Class instance) { instance.method!(SomeArgument)(); } You just can't store these arguments easily.
Mar 01 2009








Christopher Wright <dhasenan gmail.com>