gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:41:07 71 4
gpt4 key购买 nike

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

71 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com