【问题标题】:How to use variadic templates to wrap a variable number of function arguments?如何使用可变参数模板来包装可变数量的函数参数?
【发布时间】:2015-08-27 05:23:25
【问题描述】:

我想获取可变数量的函数参数,并在函数本身中,使用模板包装类包装每个函数参数,并将这些包装类作为参数传递给另一个函数。

假设我有一个简单包装变量的模板类。

template<class T>
class Wrapper
{
public:
    Wrapper(T t) : t_(t)
.
.
    {}
private:
    T t_;
}

我有一个函数 f 调用函数 g,将 f 的每个参数的 Wrapper 类传递给 g.

template <typename T1, typename T2, typename T3>
void f(T1 a, T2 b, T3 c)
{
    g(Wrapper<T1>(a), Wrapper<T2>(b), Wrapper<T3>(c));
}

函数 g 在这里并不重要,但可以是例如一系列重载函数,每个函数都有不同数量和类型的 Wrapper 类作为其参数。

有没有办法使用可变参数模板来调用模板方法 f 与可变数量的参数,传递相同数量的参数,而是将它们的包装类传递给函数 g?

非常感谢任何帮助, 托尼

【问题讨论】:

标签: c++ templates variadic-functions variadic


【解决方案1】:

技术术语是parameter packs

它应该像“简单”一样

template<typename... T>
void f(T... args)
{
    g(Wrapper<T>(args)...);
}

当然,这需要你有正确的g函数。

【讨论】:

  • 谢谢。也没有意识到参数包有多灵活。例如,用以下代码替换对函数 g 的调用: g(&Wrapper(*args)...);允许将指针作为函数 f 的参数,以取​​消引用以形成 Wrapper 类。然后将每个 Wrapper 类的指针传递给 g。
猜你喜欢
  • 2019-12-20
  • 2021-10-01
  • 1970-01-01
  • 2017-08-04
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多