Re: iterate over variadic

2017-07-10 Thread ag0aep6g via Digitalmars-d-learn

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
}


Re: iterate over variadic

2017-07-10 Thread H. S. Teoh via Digitalmars-d-learn
On Sun, Jul 09, 2017 at 10:21:59PM +, 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


Re: iterate over variadic

2017-07-09 Thread Lamex via Digitalmars-d-learn

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));

}


Re: iterate over variadic

2017-07-09 Thread drug via Digitalmars-d-learn

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


iterate over variadic

2017-07-09 Thread FoxyBrown via Digitalmars-d-learn
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.