如何使用可变模板来包装可变数量的函数参数?
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
功能。
我想采用可变数量的函数参数,在函数本身中,使用模板包装器 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
功能。