On Sunday, 1 July 2018 at 11:19:50 UTC, vino.B wrote:
On Sunday, 1 July 2018 at 09:55:34 UTC, Timoses wrote:>
Hi Timoses,
Thank you very much, can you help me on how to rewrite the
below using Variadic template
Passing function as a parameter to another function:
void ptFun(T)(T function(string, string, int) coRoutine,
Array!string Dirlst, ) {
alias scRType = typeof(coRoutine(string.init, string.init,
int.init));
where the "function(string, string, int) coRoutine" should be a
variadic function
What's your use case?
You can pretty much pass anything to a template and use "static
if" and "static foreach" in the template to steer how the
template is instantiated.
void func(T ...)(T args)
{
foreach (i, arg; args)
{
static if (isSomeFunction!(T[i]))
{
arg();
}
else
writeln(arg);
}
}
unittest
{
func(() => writeln("I'm a lambda function), "I'm a
string", 3);
}
which would print:
I'm a lambda function
I'm a string
3
I'm actually a bit suprised that `isSomeFunction!(T[i])` works
here, I'd expect an error because `i` looks like a run-time
variable... And using that in a compile-time (static if)
statement usually throws a CT error.
With templates one has to think "compile-time". Any "static if",
"static foreach" or alias declarations are compile time
constructs. What results from that after compilation is an
instantiated template for a specific use case. For example in
above case the template exists (is instantiated) with the
template parameters `(void function() @safe, string, int)`.
A good source to get some more insights is always:
http://ddili.org/ders/d.en/templates.html
(including all other sections of the book)