On 06/12/2015 03:19 PM, kerdemdemir wrote:
Hi;
I have tuples created by std.algorithm.group function.
auto tupleB = stringB.group();
I need to write a a function which takes tubleB and do some cool stuff.
If I don't use a function and write all code below .group() everytihng
works but for reusing the code I want to call a function with my tuples.
I tried ;
void foo(T...)(T tuple)
void foo(Tuple!(dchar,uint) tuplle)
But even couldn't compiile.
Do you have any idea for passing result of std.algorithm.group() to my
free function?
According to group()'s documentation, the elements of the range are
Tuples (not the range itself). Best thing to do is to use a template and
optionally require that the elements are instances of the Tuple template.
import std.stdio;
import std.algorithm;
import std.typecons;
import std.traits;
import std.range;
void foo(R)(R range)
if (isInstanceOf!(Tuple, ElementType!R)) // <-- optional
{
writefln("%(%s\n%)", range);
}
void main()
{
int[] arr = [ 1, 2, 2, 2, 2, 3, 4, 4, 4, 5 ];
foo(arr.group);
}
Prints
Tuple!(int, uint)(1, 1)
Tuple!(int, uint)(2, 4)
Tuple!(int, uint)(3, 1)
Tuple!(int, uint)(4, 3)
Tuple!(int, uint)(5, 1)
Ali
P.S. I know that you like being brief but I find it easier if you
provide complete code. :)