On 06/20/2017 10:28 PM, Jean-Louis Leroy wrote:
Any ideas? Thanks...
1) You can foreach over args: ---- void test(string name, int val) { import std.stdio; writefln("%s = %d", name, val); } T double_int(T)(T val) { return val; } int double_int(int val) { return 2 * val; } void double_ints(F, A...)(F f, A args) { foreach (ref arg; args) arg = double_int(arg); f(args); } void main() { double_ints(&test, "1 + 2", 3); } ---- 2) Or you could make a generic `tuple_map` function and use that: ---- /* ... test, double_int, and main as above ... */ auto tuple_map(alias fun, T ...)(T things) { import std.typecons: Tuple, tuple; static if (things.length == 0) return tuple(); else { auto head = fun(things[0]); auto tail = tuple_map!fun(things[1 .. $]); return tuple(head, tail.expand); } } void double_ints(F, A...)(F f, A args) { f(tuple_map!double_int(args).expand); } ----