是否可以为具有可变参数的宏定义c ++包装函数?

时间:2016-10-29 00:27:32

标签: c++ windows variadic-functions variadic-macros

我想提出一个完全包装TraceLoggingWrite宏的c ++包装函数。 TraceLoggingWrite是具有可变参数的宏。我尝试了以下代码片段,但它会遇到编译错误,因为看起来语法要求包装函数接受va_list参数。如果是这样,还有另一种方法可以实现这一目标吗?

void WrapperFunction(String Name, ...)
{
    va_list args;
    va_start(args, Name);
    TraceLoggingWrite(gProvider,
                      Name,
                      TraceLoggingInt32(32, "Test"),
                      args);
    va_end(args);
}

1 个答案:

答案 0 :(得分:2)

您可以考虑使用parameter pack

template<typename... Ts>
void WrapperFunction(String Name, Ts... args)
{
    TraceLoggingWrite(gProvider,
        Name,
        TraceLoggingInt32(32, "Test"),
        args...);
}

但是,由于TraceLoggingWrite是可变参数 ,因此可能存在参数包不起作用的情况。另一种方法是创建另一个宏,也可以是variadic,如下所示:

#define WrapperMacro(eventName, ...) TraceLoggingWrite(gProvider, eventName, __VA_ARGS__)