我如何确定最后一个变量参数

How do I identify the last variable argument?

本文关键字:变量 参数 最后一个 何确定      更新时间:2023-10-16

所以在我的函数中,我想要一个可变数量的char指针

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);
}

假设我将两个char指针传递给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`
}

(现场演示)