我想提出一个c++包装函数,该函数可以完全包装TraceLoggingWrite宏。 TraceLoggingWrite是带有可变参数的宏。我尝试了以下代码段,但是会遇到编译错误,因为似乎语法要求包装函数接受va_list参数。如果是这样,还有另一种方法可以做到这一点吗?

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

最佳答案

您可以考虑使用parameter pack:

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

但是,由于TraceLoggingWrite是可变参数的,因此在某些情况下参数包不起作用。一种替代方法是创建另一个也是可变的宏,如下所示:
#define WrapperMacro(eventName, ...) TraceLoggingWrite(gProvider, eventName, __VA_ARGS__)

关于c++ - 是否可以为带有可变参数的宏定义c++包装函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40314842/

10-12 17:28
查看更多