DMD Phobos-to-Tango转换:va_arg - 它是什么?我该怎么替换它?

时间:2011-06-28 22:40:04

标签: d tango phobos

我正在尝试将一些Phobos代码转换为其Tango等效代码,但我仍然坚持使用这段代码,我并不完全理解:

OutBuffer codebuf;

(...)

void gen(Loc loc, uint opcode, uint argc, ...)
{
    codebuf.reserve((1 + argc) * uint.sizeof);
    codebuf.write(combine(loc, opcode));
    for (uint i = 1; i <= argc; i++)
    {
        codebuf.write(va_arg!(uint)(_argptr));
    }
}

特别是va_arg会导致错误:

dmdscript_tango\irstate.d(215): Error: undefined identifier va_arg
dmdscript_tango\irstate.d(215): Error: function expected before (), not va_arg of type int

是否有人能够分享一些有关如何解决此问题的见解? : - )

2 个答案:

答案 0 :(得分:3)

结帐http://d-programming-language.org/phobos/core_vararg.html

void gen(Loc loc, uint opcode, uint argc,...)
{
    codebuf.reserve((1 + argc) * uint.sizeof);
    codebuf.write(combine(loc, opcode));

    va_list v_arg;
    va_start(v_arg,argc);
    scope(exit)va_end(v_arg); 

    for (uint i = 1; i <= argc; i++)
    {
        codebuf.write(va_arg!(uint)(v_arg));
    }
}

答案 1 :(得分:3)

根本不需要更换它。只需导入tango.core.Vararg;

或者,如果这不起作用,请尝试tango.stdc.stdarg;

另见http://dsource.org/projects/tango/docs/current/tango.stdc.stdarg.html

上的相应文件