How to send variadic arguments
Steven Schveighoffer
schveiguy at yahoo.com
Mon Aug 25 08:47:53 PDT 2008
"Zarathustra" wrote
> Steven Schveighoffer Wrote:
>
>> The way it is done in Tango is to put the implementation in a function
>> which
>> takes the _argptr and _arguments as parameters. Then the actual variadic
>> function is just a wrapper. If you want to chain another variadic
>> function
>> to it, just pass the _argptr and _arguments.
>>
>> Passing the argptr and arguments directly really should be a compiler
>> supported thing, as this is all you are doing anyways. Similar to how
>> you
>> can call opX directly.
>>
>> -Steve
>>
>>
> Reply to Steve:
>
> Do you mean something like that?
>
> import tango.io.Stdout;
> void func(char[] o_char, ...){
> Stdout(o_char, _arguments, _argptr);
> }
>
> public static int
> main(){
> int l_result = 0;
> try{
> Stdout("smile", 2, 3, 4).newline;
> func("smile", 2, 3, 4);
> }
> catch(Object o){
> l_result = 1;
> Cout(o.toString);
> }
> return l_result;
> }
>
> ## result:
> smile, 2, 3, 4
> smile, [int, int, int], 12fe58
It would be nice if something like that was supported, which is what I said
in the second paragraph, but what I meant in the first paragraph was
something like this (had to dig it up from Tango):
void realfunc1(TypeInfo[] arguments, ArgList args)
{
// function body here
}
void func1(...)
{
realfunc1(_arguments, _argptr);
}
void func2(char[] o_char, ...)
{
func1(o_char);
realfunc1(_arguments, _argptr);
}
Of course, you have to know the realfunc1 function name, or else have to
distinguish the parameters somehow. Tango's tango.text.convert.Layout has a
similar strategy. There's probably a way to use Stdout to call it the way
you want.
-Steve
More information about the Digitalmars-d-learn
mailing list