我想将参数包重新映射到不同类型的参数包。 更准确地说,我有一个功能:
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
标准中是否有提到此包扩展行为的地方 - 即函数可以应用在顶部这一事实?
最佳答案
Basically I want to create a parameter pack of the results from applying the
[]
to the pack elements.
你是指下面的意思吗?
template <typename ... type_pack,
typename Function = void(decltype(std::declval<type_pack>()[0])...)>
constexpr decltype(auto) zip(Function&& op, type_pack&&... pack)
{
/* ... */
}
如果您想要一个经过更多测试的答案,请准备一个最小但完整的示例(主要是static_for
)。
关于c++ - 参数包到参数包的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58468421/