2014-03-27 77 views
1

我需要包裝一個庫函數,該函數可以在輸入中接收可變數量的參數。 這些參數可以是不同的類型。 特別是,我得到了一個識別類型的整數參數和一個可以是數字或字符串的參數。使用可變數量的參數包裝函數

我已經嘗試使用以下函數,但參數列表來到內部函數是不正確的。

int function2(int rtype, ...); 

int function1(int rtype, ...){ 
    va_list args; 
    va_start(args, rtype); 

    int stato = function2(rtype, args); 

    va_end(args); 

    return stato; 
} 

與vprintf而不是function2一起使用此包裝正常工作。

有一個更簡潔的方法來將參數變量列表傳遞給函數嗎?

+1

功能需要有一個'v'版本,據我所知。 – chris

+0

@chris是正確的:如果'function2'也需要'...'(可變參數),則不能通過'va_list'這種方式。這根本不可能。但是您可能會看到更多C++的答案 - 使用模板的重型解決方案......或者您可以使用C風格的宏。 –

回答

2

這是最通用的方法:

template<typename... A> 
auto function1(A&&... a) 
-> decltype(function2(std::forward<A>(a)...)) 
    { return function2(std::forward<A>(a)...); } 
+0

非常真實。該功能首先不必是C風格的可變參數。 – chris