将一系列元组解包为 n 元函数

2024-03-09

假设我有一系列元组,例如来自 zip 函数。在该范围上运行的函数是否必须始终是一元的,或者是否存在某种将元组解压到函数参数中的转换。基本上,我想做以下事情:

  auto r1 = {1, 2, 3, 4};
  auto r2 = {'a', 'b', 'c', 'd'};
  auto chars = view::zip(r1, r2) | view::transform([](int a, char x) { return x; });

而不是显式使用 std::tie 或 std::apply。


听起来您真正需要的是一个分解元组参数的函数适配器。像这样的东西(LIVE https://wandbox.org/permlink/J1kiL84kApRKR9he):

#include <type_traits>
#include <utility>
#include <range/v3/core.hpp>
#include <range/v3/utility/semiregular.hpp>
#include <range/v3/utility/tuple_algorithm.hpp>

template<class F>
struct decomposed_fn
{
private:
    CONCEPT_ASSERT(ranges::CopyConstructible<F>());
    ranges::semiregular_t<F> f_;

    template<class FF>
    struct caller
    {
        FF &f_;

        template<class... Args>
        RANGES_CXX14_CONSTEXPR auto operator()(Args &&...args)
        RANGES_DECLTYPE_AUTO_RETURN_NOEXCEPT
        (
            ranges::invoke(f_, std::forward<Args>(args)...)
        )
    };

public:
    decomposed_fn() = default;
    RANGES_CXX14_CONSTEXPR explicit decomposed_fn(F f)
        noexcept(std::is_nothrow_move_constructible<F>::value)
    : f_(std::move(f))
    {}

    template<class T>
    RANGES_CXX14_CONSTEXPR auto operator()(T &&t)
    RANGES_DECLTYPE_AUTO_RETURN_NOEXCEPT
    (
        ranges::tuple_apply(caller<F>{f_}, std::forward<T>(t))
    )

    template<class T>
    RANGES_CXX14_CONSTEXPR auto operator()(T &&t) const
    RANGES_DECLTYPE_AUTO_RETURN_NOEXCEPT
    (
        ranges::tuple_apply(caller<F const>{f_}, std::forward<T>(t))
    )
};

template<class F,
    CONCEPT_REQUIRES_(ranges::CopyConstructible<std::decay_t<F>>())>
RANGES_CXX14_CONSTEXPR auto decomposed(F &&f)
RANGES_DECLTYPE_AUTO_RETURN_NOEXCEPT
(
    decomposed_fn<std::decay_t<F>>(std::forward<F>(f))
)

您可以用它来制定您的范围:

auto chars = view::zip(r1, r2)
    | view::transform(decomposed([](int, char x) { return x; }));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将一系列元组解包为 n 元函数 的相关文章

  • 以编程方式在网格视图列上显示数据

    我有一个产品数量列表和一个网格视图 网格视图已经绑定到一些数据 但我想在网格视图的第三列显示产品数量列表 以下是如何将数据绑定到网格视图的代码 gvProduct DataSource distSPUItem gvProduct DataB
  • NHibernate手动控制抓取

    我正在使用 NHibernate 我想控制手动获取相关实体 这是我的示例实体 public class Post public virtual long Id get set public virtual string Title get
  • C++ 编译器可以对结构中的元素重新排序吗

    C 编译器 特别是 g 可以对结构体的内部元素重新排序吗 我看到一些奇怪的行为 其中我有一个包含如下内容的结构 Struct SomeStruct long someLong long someLongArray 25 unsigned l
  • 在 IEnumerable 中查找相同的集合

    有一项任务要弄清楚如何更新表 DataTable 连接到一个database没有UPDATE陈述 我想出的例子是从邮箱中读取警报 该表将写入 Alerts 如果邮件正文包含单词 SUCCESS gt Alert 变为绿色 如果 FAIL g
  • 管理多个解决方案中存在的 C# 项目的 Nuget 包

    我现在正处于这样的阶段重构疯狂一个有很多的大项目遗留和不稳定的模块 我决定拆分解决方案目前 所有项目 大约有 20 个 而且由于下个月肯定会出现单元测试项目 还会有更多 链接在一起 使其更加独立和细化 通过这种方法 有一些模块 例如需要在多
  • 轮廓积分算法 C++

    我正在尝试编写一个应用数学程序来计算复平面中的轮廓积分 对于初学者来说 我想为梯形方法编写一个算法 但我有点坚持理解它会是什么样子 毕竟 我们通常将梯形方法视为 2D 图 而这里我们有 f C gt C 所以我们谈论的是 4D 最终我希望用
  • 类型定义存在于两个库中

    我正在使用 NET 4 5 构建 ASP NET Web 窗体网站 错误 The type System ComponentModel DataAnnotations Schema ForeignKeyAttribute exists in
  • 在 C++ 中从另一个数组初始化结构内的数组[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions struc
  • 驱蚊程序?

    不 我认真的 最近 我读到 当电脑的压电蜂鸣器以一定频率振动时 声音可以驱赶蚊子 真的吗 如何以编程方式访问 PC 蜂鸣器 而不是扬声器 最好使用 C 我不知道有没有蚊子 但我的头疼得要命 啊啊 using System Runtime I
  • WPF 中可选择的 TextBlock 或带有格式化文本的 TextBox

    我遇到一种情况 我需要显示格式化文本 正常 粗体 突出显示 并且还应该是可选择的 以便用户可以复制文本 我使用了文本块 我可以使用内联内容流元素应用多种格式 但不幸的是它的文本不可选择 虽然文本框允许选择文本并复制到剪贴板 但它不允许我设置
  • boost变体简单调用常用方法

    我有两个指针 只能设置其中之一 所以我正在考虑使用 boost variant 例如 boost variant
  • 需要帮助将 winform 迁移到 net 5

    我正在将 winform 应用程序从 net core 3 1 移植到 net 5 并收到以下错误 严重性代码 说明 项目文件行抑制状态 错误NETSDK1136 目标平台必须设置为Windows 通常 通过在 TargetFramewor
  • 在浏览器中测试wcf服务

    我无法在浏览器中调用基本的 wcf web 方法 即使使用
  • 有没有办法对 RichTextBox 的撤消历史进行分组或暂时禁用它?

    我目前正在研究 WPF 中 RichTextBox 内的表格 在 WPF 中 表格没有行和列 只有行 每行都有一定数量的单元格 当用户按下 添加列 按钮时 我的程序会向每一行添加一个新单元格 使用此方法的问题是 在用户添加一列后 如果他们按
  • ASP.NET Core中间件如何进行DI?

    我正在尝试将依赖项注入到我的中间件构造函数中 如下所示 public class CreateCompanyMiddleware private readonly RequestDelegate next private readonly
  • 为什么 istream/ostream 慢

    于 50 40http channel9 msdn com Events GoingNative 2013 Writing Quick Code in Cpp Quickly http channel9 msdn com Events Go
  • 为 winforms ComboBox 中的单个项目着色?

    我遇到了一个困境 我有一个表单 其中包含许多组合框 其中包含在某些情况下可能无效 过时的信息 选项 项目 我不能简单地从项目中删除过时的信息 但我确实想在选项无效时为用户提供视觉线索 我正在考虑对项目进行着色 可能是红色 来指示它们是否无效
  • 绑定未正确更新用户控件属性 MVVM

    编辑 删除旧代码 我将它放在 MainWindow xaml 上
  • wpf中的图像问题(图像不显示)

    我不明白为什么我无法在 WPF 中显示图像 也许我不小心修改了我的资源文件夹 这就是我没有显示的原因 所以我创建了一个新的 wpf 应用程序 我有这个 当我运行该程序时 我的图片显示为 为什么当我尝试在程序中执行相同的操作时 图像没有显示
  • 如何获取打印机设备上下文?

    我在 Windows 上尝试使用以下命令打印增强型图元文件 EMF 播放增强元文件 http msdn microsoft com en us library dd162800 28VS 85 29 aspx 我当前正在使用屏幕上窗口的设备

随机推荐

  • PHP 的 sha1() 和 MySQL 的 SHA() 会给出相同的结果吗?

    如果不加盐 它们会一样吗 是的 sha1 算法对于相同的输入总是产生相同的值 这就是哈希算法的全部意义 默认情况下 它们都返回 40 个字符的小写十六进制转储
  • THttpApiServer - 示例

    有人有 THttpApiServer 的示例 在 Synopse 上找到 吗 我无法找到任何有关使用此类创建简单网络服务器的文档 你可以有使用我们的论坛 http synopse info forum viewtopic php id 26
  • 多个蓝牙连接

    我想通过蓝牙连接 3 个设备 我的 Droid 必须连接到 2 个蓝牙设备 我已使用蓝牙聊天将我的 Droid 连接到 1 台设备 我应该如何修改它以适应多个蓝牙设备 我正在寻找一种通过蓝牙连接 4 台设备的方法 我发现了以下内容 http
  • 选择并显示属于特定 ID 的所有行

    I have Table student 学生科目 and 主题 bsit student studentID FullName 1234 John 1235 Michael 1236 Bryce subject bsit subject
  • Scons:仅当目标发生更改时才生成版本文件

    我需要从 SCons 脚本生成 version cc 文件 仅当目标的任何源文件发生更改时才应生成此文件 假设 SCons 脚本有以下语句 python function which generates version cc in the
  • Play 商店应用详细视图中的游戏功能部分

    如果您搜索超级火柴人高尔夫2 https play google com store apps details id com noodlecake ssg2 您将看到一个名为 游戏功能 的部分 其中显示了可用的功能 多人游戏和成就 但我的游
  • 实体框架 4.3:配置文件分离时的“更新数据库”

    移至 ef 4 3 AutomaticMigrationsEnabled true In web config有以下设置
  • 未捕获的 EvalError:拒绝将字符串评估为 JavaScript,因为“unsafe-eval”不是内容安全 Pol 中允许的脚本源

    Electron React TypeScript 应用程序的内容安全策略是什么 我什至没有使用 unsafe eval 但出现错误 以下是我尝试过并收到上述错误消息的一些内容安全策略 gt gt 您收到此错误是因为您正在尝试执行以下操作u
  • 使用点符号字符串访问对象子属性[重复]

    这个问题在这里已经有答案了 我暂时遇到了一个看似非常简单的 JavaScript 问题 但也许我只是缺少正确的搜索关键字 假设我们有一个对象 var r a 1 b b1 11 b2 99 有几种方法可以访问 99 r b b2 r b b
  • Visual Studio 向 MSBuild 传递哪些参数?

    当 Visual Studio 运行生成时 它会运行 MSBuild 来完成大部分工作 如果将 sln 文件传递 给 MSBuild 并具有适当的配置和平台属性 它将以类似于 Visual Studio 的方式构建您的解决方案 msbuil
  • R Studio 错误:“n()”只能在 dplyr 动词内部使用

    install packages c ggplot2 ggpubr tidyverse broom AICcmodavg dplyr library ggplot2 library ggpubr library tidyverse libr
  • 是否可以通过编程将 iPhone 静音?

    我已经看到了确保应用程序遵循静音开关的技术 但是是否可以使用 SDK 将 iPhone 设置为静音 任何应用程序都不会发出声音 No 使用官方 SDK 开发的应用程序无法更改 在大多数情况下甚至无法访问 系统范围的设置
  • “volumes”如何使用 docker-compose 覆盖 docker 镜像的原始文件?

    让我们用这个docker compose yml version 2 services db image mysql 5 7 volumes mysql var lib mysql lt important restart always e
  • 撤消 arrayList 中的更改

    我有一个名为 lines 的线对象数组列表 我制作了自己的线条类来绘制带有一些约束的线条 它涉及在面板中选择两个点并绘制一条连接这两个点的线 每次创建一行时 它都会添加到 行 中 这些线条是在面板中绘制的 我的面板中的绘制功能如下所示 pu
  • 使用 Python 将自定义功能属性添加到 ESRI Shapefile

    我正在寻找一种方法来获取具有 200 个国家 地区功能集的现有 ESRI Shapefile 每个国家 地区特征都有一个属性 NAME 我的目标是创建一个 Python 脚本 添加任意 目前 附加属性 例如 人口 当然 我安装了 OSGeo
  • 以 React 方式将多个字符串封装在 HTML 中

    我正在构建一个实体荧光笔 以便我可以上传文本文件 查看屏幕上的内容 然后突出显示数组中的单词 这是用户在手动突出显示某个选项时填充的数组 例如 const entities John Smith Apple some other word
  • Python DictWriter 写入 UTF-8 编码的 CSV 文件

    我有一个包含 unicode 字符串的字典列表 csv DictWriter可以将字典列表写入 CSV 文件 我希望 CSV 文件以 UTF8 编码 The csv模块无法处理将 unicode 字符串转换为 UTF8 The csv模块文
  • 自动调整 UILabel 的高度

    我正在使用以下两种方法 一种是一类NSString另一个类别是UILabel 根据标签内的文本自动调整标签的高度 它在大多数情况下运行良好 但会产生一些不可预测的结果 我不太确定问题可能发生在哪里 希望你们中的一些好人能够提供帮助 首先 这
  • 如何通过 jQuery 在按键事件期间获取 HTML 文本输入的新值?

    我只能在没有新按下的键的情况下检索该值 使用keyup事件不是一个选项 因为如果用户不释放按键 它就不会触发 这很重要 因为我想对每一个按键进行操作 将旧值与keyCode从事件参数可访问的值也是不可接受的 因为不能保证用户将键入到文本框中
  • 将一系列元组解包为 n 元函数

    假设我有一系列元组 例如来自 zip 函数 在该范围上运行的函数是否必须始终是一元的 或者是否存在某种将元组解压到函数参数中的转换 基本上 我想做以下事情 auto r1 1 2 3 4 auto r2 a b c d auto chars