【问题标题】:Wrapper to a function with a variable number of parameters包装到具有可变数量参数的函数
【发布时间】:2014-03-27 15:06:12
【问题描述】:

我需要包装一个库函数,它可以在输入中接收可变数量的参数。 这些参数可以是不同的类型。 特别是,我得到一个标识类型的整数参数,以及一个可以是数字或字符串的参数。

我尝试过使用下面的函数,但是内部函数的参数列表不对。

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 一起使用,工作正常。

有更简洁的方法将参数的变量列表传递给函数吗?

【问题讨论】:

  • 据我所知该函数需要有v版本。
  • @chris 是正确的:如果function2 也采用...(可变参数),则不能以这种方式将va_list 传递给它。这根本不可能。但是您可能会在下面看到更多使用模板的 C++ 重度解决方案的答案……或者您可以使用 C 风格的宏。

标签: c++ wrapper user-defined-functions optional-parameters


【解决方案1】:

这是最通用的方式:

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

【讨论】:

  • 非常正确。该函数首先不必是 C 风格的可变参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
相关资源
最近更新 更多