让我解释一下下面的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()

最佳答案

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

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

public:
static CString MyFormat(LPCTSTR pszFormat, ...) {
    // Open va_list, and call MyFormatImpl
}

static CString MyFormat2(int arg1, LPCTSTR pszFormat, ...) {
    // Open va_list, and call MyFormatImpl
}

private:
static CString MyFormatImpl(LPCTSTR pszFormat, va_list args) {
    // Implementation of the common functionality
}

关于c++ - 如何从类似的函数调用具有可变数量的参数的函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22123355/

10-12 03:34