2016-10-29 6 views
1

私は、TraceLoggingWriteマクロを完全にラップするC++ラッパー関数を考え出したいと思います。 TraceLoggingWriteは、可変パラメータを持つマクロです。次のコードスニペットを試みましたが、va_listパラメータを受け入れるためにラップされた関数が構文を必要とするように見えるため、コンパイルエラーが発生します。もしそうなら、これを達成する別の方法がありますか?可変パラメータを持つマクロに対してC++ラッパー関数を定義することはできますか?

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

答えて

2

あなたは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__) 
+0

転送参照を 'std :: forward'で使用することもできます。 – Jarod42

関連する問題