DMD конвертация Фобоса в Танго: va_arg - что это?и чем мне его заменить? - PullRequest
3 голосов
/ 29 июня 2011

Я пытаюсь преобразовать некоторый код 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 ]

3 голосов
/ 30 июня 2011

Вам вообще не нужно его заменять. Просто импортируйте tango.core.Vararg;

Или, если это не сработает, попробуйте tango.stdc.stdarg;

См. Также соответствующую документацию на http://dsource.org/projects/tango/docs/current/tango.stdc.stdarg.html

3 голосов
/ 29 июня 2011

проверить 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));
    }
}
...