www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How can I check to see if template type is an array?

reply Tim <tim.oliver tutanota.com> writes:
Hi all,

I need to be able to check in a template whether the type given 
is an array type so that I can do some different logic. How can I 
do this? I would have thought that if(is(T == [])) would work, 
but no.


Thanks in advance
Jan 19
next sibling parent Dennis <dkorpel gmail.com> writes:
On Tuesday, 19 January 2021 at 22:26:52 UTC, Tim wrote:
 I need to be able to check in a template whether the type given 
 is an array type so that I can do some different logic. How can 
 I do this?
`if(is(T == E[], E))` or `isDynamicArray!T` is you `import std.traits;`
Jan 19
prev sibling parent reply Paul Backus <snarwin gmail.com> writes:
On Tuesday, 19 January 2021 at 22:26:52 UTC, Tim wrote:
 Hi all,

 I need to be able to check in a template whether the type given 
 is an array type so that I can do some different logic. How can 
 I do this? I would have thought that if(is(T == [])) would 
 work, but no.


 Thanks in advance
You've almost got it. The correct syntax is `is(T == U[], U)`. You can read it as "there exists some type U such that T == U[]".
Jan 19
parent reply Tim <tim.oliver tutanota.com> writes:
On Tuesday, 19 January 2021 at 22:31:47 UTC, Paul Backus wrote:
 You've almost got it. The correct syntax is `is(T == U[], U)`. 
 You can read it as "there exists some type U such that T == 
 U[]".
Thanks! Do I need to specify U in the template function?
Jan 19
parent reply Paul Backus <snarwin gmail.com> writes:
On Tuesday, 19 January 2021 at 22:34:04 UTC, Tim wrote:
 On Tuesday, 19 January 2021 at 22:31:47 UTC, Paul Backus wrote:
 You've almost got it. The correct syntax is `is(T == U[], U)`. 
 You can read it as "there exists some type U such that T == 
 U[]".
Thanks! Do I need to specify U in the template function?
No, only inside the is(...) expression.
Jan 19
parent reply Tim <tim.oliver tutanota.com> writes:
On Tuesday, 19 January 2021 at 22:36:47 UTC, Paul Backus wrote:
 On Tuesday, 19 January 2021 at 22:34:04 UTC, Tim wrote:
 On Tuesday, 19 January 2021 at 22:31:47 UTC, Paul Backus wrote:
 You've almost got it. The correct syntax is `is(T == U[], 
 U)`. You can read it as "there exists some type U such that T 
 == U[]".
Thanks! Do I need to specify U in the template function?
No, only inside the is(...) expression.
What if it is a static array i.e. double[3]?
Jan 19
parent reply Paul Backus <snarwin gmail.com> writes:
On Tuesday, 19 January 2021 at 22:38:41 UTC, Tim wrote:
 On Tuesday, 19 January 2021 at 22:36:47 UTC, Paul Backus wrote:
 On Tuesday, 19 January 2021 at 22:34:04 UTC, Tim wrote:
 On Tuesday, 19 January 2021 at 22:31:47 UTC, Paul Backus 
 wrote:
 You've almost got it. The correct syntax is `is(T == U[], 
 U)`. You can read it as "there exists some type U such that 
 T == U[]".
Thanks! Do I need to specify U in the template function?
No, only inside the is(...) expression.
What if it is a static array i.e. double[3]?
is(T == U[n], U, size_t n)
Jan 19
parent Tim <tim.oliver tutanota.com> writes:
On Tuesday, 19 January 2021 at 22:45:19 UTC, Paul Backus wrote:
 On Tuesday, 19 January 2021 at 22:38:41 UTC, Tim wrote:
 On Tuesday, 19 January 2021 at 22:36:47 UTC, Paul Backus wrote:
 On Tuesday, 19 January 2021 at 22:34:04 UTC, Tim wrote:
 On Tuesday, 19 January 2021 at 22:31:47 UTC, Paul Backus 
 wrote:
 You've almost got it. The correct syntax is `is(T == U[], 
 U)`. You can read it as "there exists some type U such that 
 T == U[]".
Thanks! Do I need to specify U in the template function?
No, only inside the is(...) expression.
What if it is a static array i.e. double[3]?
is(T == U[n], U, size_t n)
Easy, thanks a lot!
Jan 19