我想将参数包重新映射到其他类型的参数包。
更确切地说,我有一个功能:
template<typename ...type_pack, typename Function = void(type_pack&&...)>
constexpr decltype(auto) zip(Function&& op, type_pack&&... pack)
{
static_for<0, N_lhs>([&](auto i)
{
op(pack[i]...);
});
return;
}
基本上,我想通过将
[]
应用于pack元素来创建结果的参数包。请注意,这里的i
是整数常量,而static_for是编译时间,则可以假定[]
是constexpr
。我对op
的控制不多,因此它需要一个参数包而不是一个元组。编辑:
似乎我误以为是
op(pack[i]...)
引起了问题,而实际上这是合法的C ++构造(我认为这是非法的)。所以看来我的static_for循环实际上出了点问题。我的问题本来是关于op(pack[i]...)
的,所以我会保持原样。我准备了一个更通用的示例,而不使用
[]
,而只是为了进行健全性检查而使用了另一个任意函数:https://godbolt.org/z/h8Hbbt标准中是否有提及此包扩展行为的地方-即可以在顶部应用功能的事实?
最佳答案
可以根据模式扩展参数包。
template <typename... T>
void test(T... t) {
(std::cout << ... << static_cast<int>(t));
}
在这里它被扩展为折叠表达式,但是在常规包扩展中它以相同的方式工作。这里的模式是
static_cast<int>(t)
,它将扩展为std::cout << static_cast<int>(t1) << static_cast<int>(t2) << ... << static_cast<int>(tN);
关于c++ - 参数包到参数包的映射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58468421/