c++ - 如何将可变参数参数传递给另一个函数?

标签 c++ c variadic-functions

简短版本:如何将变量参数函数中 ... 表示的内容传递给另一个函数,而不先将其解析为 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/

相关文章:

c - 小端到大端

c - 使用具有 MFCC 功能的 kohonen 网络进行语音识别。如何设置神经元及其权重之间的距离?

c++ - 将未知类型和数量的 args 和 concat 传递给 char 数组

c++ - 泛型成员函数指针作为模板参数

c++ - PlaySound()函数不会播放声音

c - 这些数据需要什么样的数据模型?

c++ - 使用 va_copy 有什么意义?

c++ - 如何找到参数包的长度?

c++ - 将字符串解析为int

c++ - 将对父对象的引用传递给需要子对象的函数