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