Ste*_*mer 6 c++ lambda templates variadic-templates c++14
我有几个ints或doubles的向量:
std::vector<int> iv = { 1, 2, 3, 4 };
std::vector<double> jv = { .5, 1., 1.5, 2. };
std::vector<int> kv = { 5, 4, 3, 2 };
Run Code Online (Sandbox Code Playgroud)
我需要处理每个向量的笛卡尔积:
for (int i : iv)
{
for (double j : jv)
{
for (int k : kv)
{
process(i, j, k);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想把它变成一个电话
product(iv, jv, kv, [=](int i, double j, int k)
{
process(i, j, k);
});
Run Code Online (Sandbox Code Playgroud)
这可能吗?(我正在使用C++ 14)
这是一个简短的递归版本,只适用于任何迭代.const&为简单起见,它需要一切:
template <typename F>
void product(F f) {
f();
}
template <typename F, typename C1, typename... Cs>
void product(F f, C1 const& c1, Cs const&... cs) {
for (auto const& e1 : c1) {
product([&](auto const&... es){
f(e1, es...);
}, cs...);
}
}
Run Code Online (Sandbox Code Playgroud)
这将是:
product(process, iv, jv, kv);
Run Code Online (Sandbox Code Playgroud)