Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
July 09, 2017 iterate over variadic | ||||
---|---|---|---|---|
| ||||
How can we iterate over a variadic and have it's index. I'll do different things depend on if it's an even or odd index, but seems to be no way to get it. |
July 10, 2017 Re: iterate over variadic | ||||
---|---|---|---|---|
| ||||
Posted in reply to FoxyBrown | 10.07.2017 01:21, FoxyBrown пишет:
> How can we iterate over a variadic and have it's index. I'll do different things depend on if it's an even or odd index, but seems to be no way to get it.
>
auto foo(Types...)()
{
foreach(T; Types)
{
// do what you need
}
}
index could be added like usual
|
July 09, 2017 Re: iterate over variadic | ||||
---|---|---|---|---|
| ||||
Posted in reply to FoxyBrown | On Sunday, 9 July 2017 at 22:21:59 UTC, FoxyBrown wrote: > How can we iterate over a variadic and have it's index. I'll do different things depend on if it's an even or odd index, but seems to be no way to get it. import std.stdio; import std.typecons, std.meta; template indexedAllSatisfy(alias F, T...) { bool doTest() { bool result = true; import std.range: iota; foreach(i; aliasSeqOf!(iota(0, T.length))) result &= F!(T[i], i, T.length); return result; } enum indexedAllSatisfy = doTest(); } unittest { template evenIntString(T, int index, int length) { static if (length & 1) enum evenIntString = false; else static if (index & 1) enum evenIntString = is(T == string); else enum evenIntString = is(T == int); } static assert(indexedAllSatisfy!(evenIntString, int, string, int, string)); static assert(!indexedAllSatisfy!(evenIntString, int , string, char, Object)); } |
July 10, 2017 Re: iterate over variadic | ||||
---|---|---|---|---|
| ||||
Posted in reply to FoxyBrown | On Sun, Jul 09, 2017 at 10:21:59PM +0000, FoxyBrown via Digitalmars-d-learn wrote: > How can we iterate over a variadic and have it's index. I'll do different things depend on if it's an even or odd index, but seems to be no way to get it. Easy: auto func(Args...)(Args args) { foreach (i, arg; args) { if (i % 2) { // even ... // do something with arg } else { // odd ... // do something with arg } } } T -- "Real programmers can write assembly code in any language. :-)" -- Larry Wall |
July 10, 2017 Re: iterate over variadic | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | On 07/10/2017 08:31 PM, H. S. Teoh via Digitalmars-d-learn wrote: > if (i % 2) { > // even odd > ... // do something with arg > } else { > // odd even > ... // do something with arg > } |
Copyright © 1999-2021 by the D Language Foundation