如何用未知类型包装可变参数函数?

时间:2013-02-13 10:02:03

标签: c++ c variadic-functions

我在lib中有一个函数,它接收一个消息和可变参数,并像printf一样打印它们。 例如:

printMe(const char *fmt,...);

我正在尝试包装此功能。我不知道参数类型和计数是什么。 我试着这样做:

printMeWrapper(const char *message,...)
{
    va_list argptr;
    va_start(argptr, message);
    printMe( message,argptr);
    va_end(argptr);
}

但这只打印第一个参数。关于如何正确地做到这一点的任何想法?

2 个答案:

答案 0 :(得分:3)

您必须使用printMe参数创建第二个va_list函数,就像printfvprintf一样:

void printMeVa(const char *fmt, va_list va)
{
    ...
}

答案 1 :(得分:1)

您可以使用宏来代替:

#define printMeWrapper(message, ...) \
  DoSmthBefore(); \
  printMe(message, __VA_ARGS__); \
  DoSmthAfter();
相关问题