2016-10-29 11 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 사용을 고려할 수 있습니다 TraceLoggingWrite이 매크로 가변 입니다

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

그러나 때문에, 매개 변수 팩이 작동하지 않는 경우가있을 수 있습니다. 또 다른 대안은 다음과 같은 또 다른 매크로를 만드는 것입니다.

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

'std :: forward'를 사용한 전달 참조를 사용할 수도 있습니다. – Jarod42