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

时间:2011-04-06 16:33:01

标签: c++ logging macros

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

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 : %d\n", 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;
         .
         .
         .
         .
         .

    };
}

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

2 个答案:

答案 0 :(得分:1)

没有办法 - 您需要明确传递此信息,例如使用count参数或显式0作为最后一个参数。类型信息也不以任何形式传递。

答案 1 :(得分:1)

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

编辑:即使根据va_arg的联机帮助页,你也无法做到你想做的事。

  

如果没有实际的下一个参数,        或者iftype与实际的下一个类型不兼容        参数(根据默认参数pro-提升        行动),行为未定义。

但这是标记的C ++,所以为什么不使用C ++习语:使用流和插入operator<<而不是使用varargs。