Mixture of type tuple and expression tuple

Timon Gehr timon.gehr at gmx.ch
Mon Feb 6 14:45:36 PST 2012


On 02/06/2012 11:26 PM, Matthias Walter wrote:
> Hi,
>
> I'd like to have a function foo which shall depend on several
> compile-time expressions (e.g. strings) and gets several arguments whose
> types are templatized. Here, "several" means in both cases that the
> number of expressions/arguments are to be determined at compile-time.
> Here is an example:
>
> foo!("a", "b", c")(42, new MyClass(), 7.0);
>
> At compile-time, some template parameters (strings "a", "b" and "c")
> shall be given explicitly and some more template parameters (types of
> arguments int, MyClass, double) shall be deduced from the function
> arguments.
>
> Is that possible? Of course, I cannot setup two TemplateTupleParameters.
>
> Best regards,
>
> Matthias
>

This should do the job:

template foo(CompileTimeArgs...){
     auto foo(RuntimeArgTypes...)(RuntimeArgTypes args){ ... }
}

It requires explicit !() in case the CompileTimeArgs tuple is empty.

(If that is not what you want, introduce another overload of the 
template. Eventually, just having alias foo!() foo; will work too, but 
not currently, because of a compiler bug)


More information about the Digitalmars-d-learn mailing list