如何识别最后一个变量参数?
How do I identify the last variable argument?
所以在我的函数中我想获取可变数量的字符指针。
void myFunction(char *_Name, ...);
只是,当我遍历参数时,我的代码中断了,因为我不确定如何停止我传递的最后一个参数,而不是继续前进。
void myClass::myFunction(char *_Name, ...)
{
char *a;
std::vector<char*> names;
va_list VariablePathList;
va_start (VariablePathList, _Name);
a = _Name;
bool exitLoop = false;
while(!exitLoop)
{
names.emplace_back(a);
a = va_arg(VariablePathList, char *);
//what must I do to set "exitLoop = true" at the right time?
}
va_end (VariablePathList);
}
假设我将两个字符指针传递给 myFunction,然后当 va_arg 调用不可读的内存时代码在第三个循环中断。
在不告诉 myFunction 我给了它多少个参数的情况下,它怎么能在代码中断之前找到设置 exitLoop 的数字?
我似乎无法找到有关 printf() 等如何执行此操作的直接信息,因此可能存在我所追求的解决方案。
真的,谢谢你。
printf
通过解析格式字符串来实现。其他一些函数通过在可变参数之前接受显式 count
参数来实现。走哪条路取决于您的具体需求。
不过,现在是 2015 年了,所以您应该使用可变参数模板而不是陈旧的 C 习惯。我也绝对不建议将 char*
存储在容器中。
这是所有你需要的:
#include <vector>
#include <string>
template <typename... T>
void foo(T... args)
{
std::vector<std::string> names{args...};
// now use `names`
}
(live demo)
所以在我的函数中我想获取可变数量的字符指针。
void myFunction(char *_Name, ...);
只是,当我遍历参数时,我的代码中断了,因为我不确定如何停止我传递的最后一个参数,而不是继续前进。
void myClass::myFunction(char *_Name, ...)
{
char *a;
std::vector<char*> names;
va_list VariablePathList;
va_start (VariablePathList, _Name);
a = _Name;
bool exitLoop = false;
while(!exitLoop)
{
names.emplace_back(a);
a = va_arg(VariablePathList, char *);
//what must I do to set "exitLoop = true" at the right time?
}
va_end (VariablePathList);
}
假设我将两个字符指针传递给 myFunction,然后当 va_arg 调用不可读的内存时代码在第三个循环中断。
在不告诉 myFunction 我给了它多少个参数的情况下,它怎么能在代码中断之前找到设置 exitLoop 的数字?
我似乎无法找到有关 printf() 等如何执行此操作的直接信息,因此可能存在我所追求的解决方案。
真的,谢谢你。
printf
通过解析格式字符串来实现。其他一些函数通过在可变参数之前接受显式 count
参数来实现。走哪条路取决于您的具体需求。
不过,现在是 2015 年了,所以您应该使用可变参数模板而不是陈旧的 C 习惯。我也绝对不建议将 char*
存储在容器中。
这是所有你需要的:
#include <vector>
#include <string>
template <typename... T>
void foo(T... args)
{
std::vector<std::string> names{args...};
// now use `names`
}