gpt4 book ai didi

c++ - 如何检测可变参数函数的空参数列表(va_arg、va_end、va_start)

转载 作者:太空狗 更新时间:2023-10-29 20:05:43 49 4
gpt4 key购买 nike

我有一个封装 CString::FormatV 的函数函数,并且我需要能够检测是否向该函数传递了一个空参数列表。执行此操作的最佳方法是什么?

我现在的代码是这样的

CString ADString::Format(CString csFormat, ...)
{
//Code comes from CString::Format()
CString csReturn;
va_list argList;
va_start(argList, csFormat);
csReturn.FormatV(csFormat, argList);
va_end( argList );
return csReturn;
}

我想要这样的东西

CString ADString::Format(CString csFormat, ...)
{
//Code comes from CString::Format()
CString csReturn;
va_list argList;
va_start(argList, csFormat);
//If it's empty, don't send to FormatV
if(!IsArgListEmpty(argList))
csReturn.FormatV(csFormat, argList);

va_end( argList );

return csReturn;
}

最佳答案

你不能。无法判断通过省略号传递了多少参数或什么类型的参数,因此您需要一些其他方法(例如 printf 格式字符串)来传递该信息。

在 C++11 中,您可以使用可变模板做一些非常相似的事情:

template <typename... Args>
CString ADString::Format(CString csFormat, Args... argList)
{
CString csReturn;

//If it's empty, don't send to FormatV
if(sizeof... argList != 0)
csReturn.FormatV(csFormat, argList...);

return csReturn;
}

关于c++ - 如何检测可变参数函数的空参数列表(va_arg、va_end、va_start),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12110965/

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