gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:47:42 25 4
gpt4 key购买 nike

我想提出一个完全包装 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);
}

最佳答案

您可以考虑使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com