2014-03-27 83 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