将参数从可变参数函数转发到固定参数函数

forwarding parameters from variadic function to fixed argument function

本文关键字:参数 函数 转发 变参      更新时间:2023-10-16

我有一个函数,它接受可变数量的参数。从这个函数中,我想调用接受固定数量参数的函数,

void log(int level, const char* format, ...)
{
    va_list args;
    va_start(args, fmt);
    int count = 0;
    void *navigator[10] = NULL;
    while ((navigator[count] = va_arg(args, char*) ) != NULL && count < 10) 
        ++count;   //Is this the right way to count no. of arguments passed ?

    fprintf(stderr, "**** No of arguments : %dn", count);
    fflush(stderr);
    switch (count - 2)
    {
    case 0:
                log_l(level, fmt);
        break;
    case 1:
           log_l1(level, fmt, navigator[0]);  // how would I get arg1 here, 
                                              // I get NULL in the called function)*/
        break;
         .
         .
         .
         .
         .
    };
}

我想知道正确的方法来计算传递的参数数量,然后正确地将它们转发给其他固定参数函数

您的va_start需要是va_start(args, format); // Note change to "format"

编辑:即使根据va_arg的手册,你也不能做你想做的。

如果没有实际的下一个参数,或者如果type与实际next的类型不兼容参数(根据默认参数pro-提升)

但这是标记c++,所以为什么不使用c++的习惯用法:使用流和插入operator<<,而不是使用变量。

没有办法——你需要显式地传递这些信息,例如,使用count参数或显式地将0作为最后一个参数。Type info也不以任何形式传递