假设我有一个方法fun
的结构如下。
template<class T, template <class> class ... base_t>
struct S : base_t<T> ... {
template<class ... args_t>
void fun(args_t& ... args) {
//Here
}
};
我想在//Here
中做的是将第n个基数的operator()()
调用的结果分配给第n个参数。这意味着如果我有两个这样的结构:
template<class>
struct D1 {
double operator()() { return 4.2; }
};
template<class>
struct D2 {
double operator()() { return 4.2; }
};
template<class>
struct I {
int operator()() { return 42; }
};
然后此代码应打印4.2 4.2 42
:
S<double, D1, D2, I> s;
double a, b;
int c;
s.fun(a, b, c);
std::cout << a << ' ' << b << ' ' << c << std::endl;
答案 0 :(得分:2)
在C ++ 17中,使用fold表达式:
template <typename ... base_t>
struct S : base_t ... {
template<typename ... args_t>
void fun(args_t& ... args) {
(base_t::operator()(args), ...);
}
};