On Wednesday, 22 August 2018 at 10:36:32 UTC, Andrey wrote:
Hello,
Is there a template/function/mixin... in the library that I can
use to map elements of a tuple?
object.foo(Mapper!myMapFunction(1, bool, "Qwerty",
EnumedColor.Red));
where "Mapper" is this mapper and "myMapFunction" is a template
function that I want to apply to each member in tuple.
I know that there is std.algorithm.map but as I understand it
is suitable only for arrays (types are the same).
I believe this should be what you're looking for:
import std.typecons;
auto map(alias fn, T...)(Tuple!T arg) {
import std.conv : text;
import std.range : iota;
import std.algorithm.iteration : joiner, map;
return mixin(text("tuple(",T.length.iota.map!(i =>
text("fn(arg[",i,"])")).joiner(", "),")"));
}
unittest {
import std.conv : to;
auto a = tuple(1,2,"").map!(a => a.to!string);
assert(a == tuple("1","2",""));
}
--
Simen