non-typesafe variadic lazy arguments
Steven Schveighoffer
schveiguy at yahoo.com
Fri Feb 1 08:43:28 PST 2008
Does nobody have any insight on this? :(
-Steve
"Steven Schveighoffer" wrote
> I'm sure this has been asked before, but I can't remember the answer.
>
> How does one create a function that takes non-typed variadic arguments?
>
> Essentially, what I want is for this to work:
>
> void f(lazy ...);
>
> The current spec allows for typed variadic lazy functions i.e.:
>
> void f(char[] delegate()[] dg ...); // every arg has to be a char[]
>
> But if I want any type to be passed in, there doesn't seem to be a way to
> do it, as there is no builtin type that any type can be casted to
> implicitly (or is there?).
>
> If I want to evaluate the variadic args lazily, I can use a level of
> indirection:
>
> char[] evalOnCondition(bool condition, lazy char[] result)
> {
> if(condition) writefln(result);
> }
>
> variadicF(char[] buffer, ...){...}
>
> char[400] buf;
> evalOnCondition(loops==5, variadicF(buf, "inloop", 5));
>
> But what I really want to do is intercept the variadic function call. I
> want to provide a function that allows you to call evalOnCondition and
> variadicF without a buffer and without allocating it from the heap:
>
> variadicEvalOnCondition(bool condition, lazy ...)
> {
> char[400] buf;
> if(condition)
> writefln(variadicF(buf, _argptr, _arguments)); // doesn't eval ...
> until here
> }
>
> Any ideas how this can be done?
>
> -Steve
More information about the Digitalmars-d-learn
mailing list