Templates array detection
bearophile
bearophileHUGS at lycos.com
Wed Dec 12 04:34:33 PST 2012
Cube:
> I'm having a problem getting templates to work correctly.
> I want to handle arrays differently, but when I try to compile
> the following example code it says it matches more than 1
> template. What is the correct way to do this?
>
>
> --
> void main()
> {
> foo(1);
> foo([1,1]);
> }
>
> void foo(T)(T t)
> {
> writeln(t);
> }
>
> void foo(T)(T[] t)
> {
> for(int i = 0; i < t.length; i++)
> writeln(t[i]);
> }
> --
In general D templates refuse ambiguity. So to fix your situation
you have to state that the T in your first foo overload is not an
array:
import std.stdio, std.traits;
void main()
{
foo(1);
foo([1, 1]);
}
void foo(T)(T t) if (!isArray!T)
{
writeln(t);
}
void foo(T)(T[] t)
{
foreach (ti; t)
writeln(ti);
}
Bye,
bearophile
More information about the Digitalmars-d-learn
mailing list