簡體   English   中英

是否可以為帶有可變參數的宏定義c ++包裝函數?

[英]Is it possible to define a c++ wrapper function for a macro with variadic parameters?

我想提出一個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);
}

您可以考慮使用參數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__)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM