简短版本:如何将变量参数函数中 ...
表示的内容传递给另一个函数,而不先将其解析为 va_list
?
长版:
下面是我的一个类中的两个函数。我想提请您注意每个函数的前四行是相同的。我在这个类中还有六个其他函数具有相同的前四行。
void cyclOps::Logger::warn(char* szFile, char* szFunction, int iLine, char* szFormat, ...) {
va_list vaArguments;
va_start(vaArguments, szFormat);
char szOutput[10000];
_vsnprintf_s(szOutput, CYCLOPSSIZEOF(szOutput), _TRUNCATE, szFormat, vaArguments);
this->log("WARNING: %s [%s - %s(%d)]", szOutput, szFile, szFunction, iLine);
}
void cyclOps::Logger::info(char* szFormat, ...) {
va_list vaArguments;
va_start(vaArguments, szFormat);
char szOutput[10000];
_vsnprintf_s(szOutput, CYCLOPSSIZEOF(szOutput), _TRUNCATE, szFormat, vaArguments);
this->log("INFO: %s", szOutput);
}
我想将这四行相同的代码放在一个名为 summarizeVariableArguments()
的函数中,并像这样调用它...
void cyclOps::Logger::info(char* szFormat, ...) {
std::string strOutput = this->summarizeVariableArguments(/* TBD */);
this->log("INFO: %s", strOutput.c_str());
}
...其中 strOutput
的内容与前两个函数中 szOutput
的内容相同。但是如何将 ...
参数传递给另一个函数呢?
最佳答案
你不能以可移植的方式做到这一点(或者可能在编译时,使用可怕的 C++2011 可变参数模板技巧)。
如果您想在运行时调用可变参数函数,您可能需要使用 libffi .
详细信息是特定于操作系统、编译器、处理器和 ABI 的。 (但是 libffi
试图将它们抽象化)。
关于c++ - 如何将可变参数参数传递给另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13748850/