如何使用可变参数模板来包装多个函数参数?

4
我想编写一个函数,它可以处理可变数量的参数。在函数内部,我需要使用模板包装类(template wrapper class)对每个参数进行包装,并将这些包装后的类作为参数传递给另一个函数。
例如,如果我有一个模板类,它只是简单地对一个变量进行了包装。
template<class T>
class Wrapper
{
public:
    Wrapper(T t) : t_(t)
.
.
    {}
private:
    T t_;
}

我有一个函数f,它调用函数g,将每个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类作为参数。

是否有一种方法可以使用可变模板来调用模板方法f,传入可变数量的参数,将它们的包装类作为同样数量的参数传递给函数g

非常感谢任何帮助, Tony


你是指类似这样的东西吗?不确定我是否理解了问题。 - WhozCraig
1个回答

2
“参数包”是技术术语。
它应该像这样“简单”。
template<typename... T>
void f(T... args)
{
    g(Wrapper<T>(args)...);
}

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

谢谢。我之前没有意识到参数包是多么灵活。例如,将对函数g的调用替换为:g(&Wrapper(*args)...);允许将指针作为函数f的参数,并将其解引用以形成Wrapper类。然后将每个Wrapper类的指针传递给g。 - Tony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接