将一系列元组解包为 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 元函数 的相关文章

  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 重载<<的返回值

    include
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 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