Thread overview | |||||
---|---|---|---|---|---|
|
August 22, 2018 How to map elements of a tuple? | ||||
---|---|---|---|---|
| ||||
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).
|
August 22, 2018 Re: How to map elements of a tuple? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrey | 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).
Could you explain, how you mix a type "bool" and a value "Qwerty" in a single tuple? Especially, which value do you pass to you function, when the template parameter becomes bool?
|
August 22, 2018 Re: How to map elements of a tuple? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrey | 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 |
Copyright © 1999-2021 by the D Language Foundation