May 25, 2020 Overload function template for rectangular array | ||||
---|---|---|---|---|
| ||||
Is it possible to overload a function template for rectangular arrays? Is there any way to tell them apart from normal ones? void foo(T)(T[] a) {} void foo(T)(T[][] a) {} auto ra = new int[][](5, 5); ra.foo(); // matches both Thanks for any hints. |
May 25, 2020 Re: Overload function template for rectangular array | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Chapman | On 5/25/20 1:20 AM, John Chapman wrote:
> void foo(T)(T[] a) {}
> void foo(T)(T[][] a) {}
>
> auto ra = new int[][](5, 5);
> ra.foo(); // matches both
import std.traits;
void foo(T)(T[] a)
if (!isArray!T) {}
void foo(T)(T[] a)
if (isArray!T) {}
Or you can take T as parameter and check ElementType!T:
import std.traits;
import std.range;
void foo(T)(T a)
if (!isArray!(ElementType!T)) {}
void foo(T)(T a)
if (isArray!(ElementType!T)) {}
void main() {
auto ra = new int[][](5, 5);
ra.foo();
}
Ali
|
Copyright © 1999-2021 by the D Language Foundation