C++ 如何包装未知类型的变量函数?
我在库中有一个函数,它接受消息和可变参数,并像printf一样打印它们。 例如: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);
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++)中不可能做到这一点。