这很好:
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(...)
的一次调用?
答案 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(")");
}