如何使用可变模板来包装可变数量的函数参数?

How to use variadic templates to wrap a variable number of function arguments?

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

假设我有一个模板 class 只是包装了一个变量。

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

我有一个函数 f 调用函数 g,为 class 的每个参数传入 Wrapper classes =24=]f 到 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 classes作为它的参数。

有没有一种方法可以使用可变参数模板调用模板方法 f 并使用可变数量的参数,传入相同数量的参数,而不是使用它们的包装器 class进入函数 g?

非常感谢任何帮助, 托尼

技术术语是parameter packs

它应该和"easy"一样

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

当然,这需要你有合适的g功能。