digitalmars.D.learn - Using IFTI to only allow params of a certain template instance?
- Jarrett Billingsley (21/21) Jul 06 2007 Say I have a function which has a parameter whose type has to be an inst...
- BCS (10/42) Jul 06 2007 ??
- Jarrett Billingsley (3/4) Jul 06 2007 ..I don't know why I didn't think of that. Thanks :)
Say I have a function which has a parameter whose type has to be an instance of a particular template, like so: class Temp(T) { // blah } OK, so the first thing I tried was something like this: void func(T, U : Temp!(T))(U param) { } but when I call it like auto t = new Temp!(int)(); func(t); the compiler doesn't accept it, it says it can't deduce the types. It looks right to me, though. If I switch the order of the template parameters to func, I get different errors (notably, an error saying that I can't have a specialization for a deduced parameter). Is there any way to restrict the parameter like this? I thought about using a static assert with is(), but I can't think of how I'd check that the type of the parameter is an instance of Temp.
Jul 06 2007
Jarrett Billingsley wrote:Say I have a function which has a parameter whose type has to be an instance of a particular template, like so: class Temp(T) { // blah } OK, so the first thing I tried was something like this: void func(T, U : Temp!(T))(U param) { } but when I call it like auto t = new Temp!(int)(); func(t); the compiler doesn't accept it, it says it can't deduce the types. It looks right to me, though. If I switch the order of the template parameters to func, I get different errors (notably, an error saying that I can't have a specialization for a deduced parameter). Is there any way to restrict the parameter like this? I thought about using a static assert with is(), but I can't think of how I'd check that the type of the parameter is an instance of Temp.?? void func(T)(Temp!(T) param) ?? class Temp(T) { private alias T t } void func(U)(U.t param) // totaly un tested
Jul 06 2007
"BCS" <BCS pathlink.com> wrote in message news:f6mhtv$2pi9$1 digitalmars.com...void func(T)(Temp!(T) param)..I don't know why I didn't think of that. Thanks :)
Jul 06 2007