如何从类似的函数调用具有可变数量参数的函数?

时间:2014-03-02 03:06:40

标签: c++ c windows mfc

让我用下面的C ++ / MFC代码解释一下我的意思:

static CString MyFormat(LPCTSTR pszFormat, ...)
{
    CString s;
    va_list argList;
    va_start( argList, pszFormat );
    s.FormatV(pszFormat, argList);
    va_end( argList );

    return s;
}

static CString MyFormat2(int arg1, LPCTSTR pszFormat, ...)
{
    if(arg1 == 1)
    {
        //How to call MyFormat() from here?
        return MyFormat(pszFormat, ...);    //???
    }

    //Do other processing ...
}

如何在MyFormat()内致电MyFormat2()

2 个答案:

答案 0 :(得分:5)

您无法直接执行此操作:打开va_list后,您无法将其传递给需要...的函数,而只传递给需要va_list的函数。

这不会阻止您在采用可变参数列表的多个函数之间共享变量参数代码:您可以遵循printf + vprintf的模式,提供需要{{1}的重载},并从两个地方调用它:

va_list

答案 1 :(得分:0)

您必须将参数绑定移动到MyFormat2。像这样:

if(arg1 == 1)
{
    va_list argList;
    va_start( argList, pszFormat );
    CString result = MyFormat(pszFormat, argList);
    va_end( argList );
    return result;
}

并在MyFormat内逐个处理参数,或者 - 就像现在一样 - 将它们传递给另一个函数。您还必须将MyFormat的声明更改为:

static CString MyFormat(LPCTSTR pszFormat, va_list argList)