使一个var-args方法调用另一个但使用其他参数

时间:2015-07-23 10:23:41

标签: c++ variadic-functions

这很好:

void print(char *pstrFormat, ...)
{
    va_list vaList;

    va_start(vaList, pstrFormat);

    print(pstrFormat, vaList);

    va_end(vaList);
}

void print(char *pstrFormat, va_list vaList)
{
 ...
}

但现在我想添加类似的内容:

void printError(Error &e,char *pstrFormat,...)
{
 print("Error %s [%d] (%s)",e.name(),e.code(),pstrFormat,...);
}

我无法看到...即使printError调用print(char *pstrFormat, va_list vaList),也需要在列表中添加其他参数。我想,我有效地尝试合并两个va_lists

这是可能的还是我需要先单独构建字符串并将它们传递给print(...)的一次调用?

1 个答案:

答案 0 :(得分:4)

使用可变参数模板,您可以执行类似

的操作
template <typename ... Ts>
void printError(Error &e, const char *pstrFormat, Ts&&... args)
{
    print("Error %s [%d] (", e.name(), e.code());
    print(pstrFormat, std::forward<Ts>(args)...);
    print(")");
}