我有一个封装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;
}
答案 0 :(得分:8)
你做不到。没有办法告诉通过省略号传递了多少或哪种类型的参数,因此您需要一些其他方法(例如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;
}