C++ 如何包装未知类型的变量函数?

C++ 如何包装未知类型的变量函数?,c++,c,variadic-functions,C++,C,Variadic Functions,我在库中有一个函数,它接受消息和可变参数,并像printf一样打印它们。 例如: printMe(const char *fmt,...); 我正在尝试包装这个函数。我不知道什么是参数类型和计数。 我试着这样做: printMeWrapper(const char *message,...) { va_list argptr; va_start(argptr, message); printMe( message,argptr); va_end(argptr);

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

printMe(const char *fmt,...);
我正在尝试包装这个函数。我不知道什么是参数类型和计数。 我试着这样做:

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

但这只打印第一个参数。您知道如何正确执行此操作吗?

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

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

您可以改为使用宏:

#define printMeWrapper(message, ...) \
  DoSmthBefore(); \
  printMe(message, __VA_ARGS__); \
  DoSmthAfter();

如果你不能随身携带(这就是为什么
printf
系列有
v*
对应项的原因)。你能使用可变模板吗?如果是,则可以将包装器实现为函数模板,然后轻松提取参数。这张幻灯片很好地展示了原理,您可以看到幻灯片,重要的部分从幻灯片17开始。我需要使用printMe,但我不知道它是如何实现的。@talon在这种情况下,您很不幸运气不佳,因为在纯C(或C++)中不可能做到这一点。