Is there a reason why there's no way to manually pass args to variadic func?

QAston qaston at gmail.com
Sat Feb 15 05:40:17 PST 2014


There's a design pattern in D which dates back to C - for every 
vararg function there's a v*function*(Typeinfo[], void*) sibling 
function which allows one to wrap the function in another 
variadic.

You can see an example here:
http://dlang.org/phobos/std_stream.html#.InputStream.vreadf

Why is this C pattern preserved in D? I think it should be 
possible to pass Typeinfo-Vararg pair into function(...) without 
the need for vfunction(Typeinfo, void*) as those parameters 
arrays are probably generated on the caller side anyways?

This pattern is problematic because a-very-smart-library-designer 
may forget to add a v- function variant (in which case users are 
screwed), and it cripples metaprogramming (for example for my 
mocking library).

And yeah, I know this is easy to with template methods but those 
can't be used in interfaces because they're compile time entities.


More information about the Digitalmars-d mailing list