c++ - 参数包到参数包的映射

标签 c++ templates variadic-templates

我想将参数包重新映射到不同类型的参数包。 更准确地说,我有一个功能:

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/

相关文章:

c++ - 选择可变参数模板最后一个参数的有效方法

c++ - 转换日期格式 Www Mmm dd hh :mm:ss yyyy to dd hh:mm:ss string in c++

c++ - 如何组织版本化文件的导入和导出代码?

c++ - C++ 适合我的应用程序吗?

c++ - 模板化类和模板化方法的模板特化语法

c++ - 在 C++ 模板中将变量作为参数传递

c++ - 如何从模板类方法中调用已定义类的方法

c++ - Opengl - 如何从像素缓冲区加载纹理

c++ - 通过模板化的友元类完美转发到私有(private)类构造函数

c++ - 判断模板参数包中 "optimal"公共(public)数值类型