Boost hana 获取第一个匹配的索引

2023-12-01

所以我正在尝试使用以下方法创建一个库boost::hana这需要根据值获取元素索引的功能:

constexpr auto tup = boost::hana::make_tuple(3_c, boost::hana::type_c<bool>);

auto index = get_index_of_first_matching(tup, boost::hana::type_c<bool>);
//   ^^^^^ would be a boost::hana::int_<1>

有没有可能的方法来做到这一点?更好的是,它已经在hana我不知道这件事?

感谢您的支持!


Hana 没有提供开箱即用的算法来执行此操作。如果它看起来是一个非常需要的功能,我可以相当容易地添加这样的算法。它可能很适合作为任何界面的一部分Iterable, since Iterables 是索引有意义的序列。

目前,我会采用与 @cv_and_he 在他的评论中提出的非常接近的内容:

#include <boost/hana.hpp>
namespace hana = boost::hana;

template <typename Iterable, typename T>
constexpr auto index_of(Iterable const& iterable, T const& element) {
    auto size = decltype(hana::size(iterable)){};
    auto dropped = decltype(hana::size(
        hana::drop_while(iterable, hana::not_equal.to(element))
    )){};
    return size - dropped;
}

constexpr auto tuple = hana::make_tuple(hana::int_c<3>, hana::type_c<bool>);
constexpr auto index = index_of(tuple, hana::type_c<bool>);
static_assert(index == hana::size_c<1>, "");

int main() { }

关于上述代码的一些注释。首先,Hana 中的索引必须为非负数,因此使用无符号类型可能是个好主意。其次,我正在使用hana::drop_while代替hana::take_while,因为前者只需要一个Iterable,而后者需要Sequence。虽然看起来我做了更多的工作(计算大小两次),但事实证明,计算您将遇到的大多数序列的大小非常快,因此这并不是真正的问题。最后,我附上hana::size(hana::drop_while(...)) in decltype,这确保在运行时不会完成任何工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Boost hana 获取第一个匹配的索引 的相关文章

随机推荐

  • 无法使用preparedStatement创建表

    我无法使用以下命令在数据库 mySQL 中创建表preparedStatement并尝试输入未来表的名称preparedStatement setInteger static String queryCreateTable CREATE T
  • 在 ReportNG 中未获取 TestNG 的报告

    我正在 eclipse 中执行 testng 我想在 reportNG 中生成报告 为此 我已经包含了 guice 3 0 reportng 1 1 3 velocity dep 1 4 jar 文件 并在 xml 文件中添加了侦听器 此外
  • jQuery 通过按钮 onclick 跳转或滚动到页面上的特定位置、div 或目标 [重复]

    这个问题在这里已经有答案了 当我单击按钮时 我希望能够向下跳转或滚动到页面上的特定 div 或目标 clickMe click function jump to certain position or div or target on th
  • 如何定义实例?

    我在面试中被问到一个问题 但我无法回答 这是问题 您将如何定义实例 c 我的回答是它是另一个名字object 这个问题的正确答案是什么 实例之于类 就像蛋糕之于菜谱一样 每当您使用构造函数创建对象时 您都在创建一个实例
  • 用于 WSDL 和 BasicHttpBinding 的 F# 类型提供程序

    当我在 C 中使用 WSDL 服务时 我可以将两个参数传递给构造函数 BasicHttpBinding 和 EndpointAddress BasicHttpBinding basicHttpBinding new BasicHttpBin
  • PHP Artisan Tinker 无法与 Laravel 5.5.16 一起使用

    我运行 php artisantinker 但它不起作用它只显示这样的消息 c xampp htdocs app tpa gt php artisan tinker 错误异常 rmdir C Users KIMUNG 1 AppData L
  • 如何使用 JavaScript Regex 提取字符串?

    我正在尝试使用 JavaScript 正则表达式从文件中提取子字符串 这是文件中的一个片段 DATE 20091201T220000 SUMMARY Dad s birthday 我要提取的字段是 摘要 方法如下 extractSummar
  • Mac Lion 10.8 的 XAMPP 上的 Php-intl 安装

    大家好 我正在尝试在 Mac 版 xampp 上安装 intl 库 我已经安装了 php 5 3 所以我只是将 intl so 文件从 php 5 3 位置复制到 Xampp bin 文件夹 之后我取消注释 extension intl s
  • Java 中的静态泛型字段

    我将通过传递通用字段 演示者 来实现片段的初始化 然后将此演示者连接到创建的视图 public class BaseViewFragment p extends Fragment implements BaseView static pri
  • 在 Access 查询中调用 VBA 函数

    我正在尝试将 8 个不同查询的结果合并回一个查询中 所有要使用的查询都是查询的查询的查询的查询的查询 8 个系列的 4 个查询根据玩家打了多少轮高尔夫球将他们分开 每个系列中的最后一个查询计算每个玩家的确切让分 我正在使用的代码可能无法实现
  • Python 脚本在运行过程中速度变慢?

    我正在运行一个具有以下基本结构的模拟 from time import time def CSV args write args to CSV file return def timeleft a L period print detail
  • 3D 游戏对象的级联效果(Tango、Unity、Android)

    我正在开始使用 Unity 为 Android 构建 Tango 应用程序 我以前有过 Unity 和 Android 经验 但对 Tango 还很陌生 我遵循了这些指南 https developers google com tango
  • 伯努利朴素贝叶斯在 NLTK 和 scikit-learn 中的结果不同

    使用 NLTK 中的伯努利朴素贝叶斯算法和 scikit learn 模块中的伯努利朴素贝叶斯算法对文本进行分类 仅分为两类 时 我得到了完全不同的结果 尽管两者的总体准确度相当 尽管远非相同 但 I 类和 II 类错误的差异很大 特别是
  • Neo4j:正确对螺栓驱动器进行单元测试

    我将 Neo4j Bolt 驱动程序添加到我的应用程序中 如下所示http neo4j com developer java import org neo4j driver v1 Driver driver GraphDatabase dr
  • 如何通过点击缩略图来显示/隐藏大图?

    如何通过点击缩略图来显示 隐藏大图 我需要这样 在这里尝试使用 JSFiddle http jsfiddle net jitendravyas Qhdaz 只用 CSS 可以吗 如果没有 那么 jQuery 解决方案就可以了 An好用吗 a
  • ms-access 内置函数 Month(number)

    我一直在使用访问查询生成器中的 Month 函数的变体 我无法从表达式构建日期值 我希望创建自己的日期 该日期将在幕后执行一些过滤和其他任务 我的问题是 我似乎无法让 Month number 函数执行我认为应该执行的操作 这是我正在寻找的
  • Python:如何使冒泡排序的实现更加省时?

    这是我的代码 用于按升序对列表元素进行排序的冒泡排序算法 foo 7 0 3 4 1 cnt 0 for i in foo for i in range len foo 1 if foo cnt gt foo cnt 1 temp foo
  • 如何在 Python 2.7 中用另一个类修饰实例方法?

    在Python 2 7中我想装饰一个实例方法test在班上Foo带有一个装饰器 它也是一个名为FooTestDecorator 来自用户 Chirstop 的question和 Python 2 文档 描述符操作指南我创建了这个例子 然而
  • 在 Android 中更改运行时语言

    我必须更改 Android 运行时的语言 是的 我知道这不是一个好的行为 但这是一个要求 所以我有一个基础课程 每项活动都从它延伸而来 该类具有以下功能 public static void changeLanguage Context c
  • Boost hana 获取第一个匹配的索引

    所以我正在尝试使用以下方法创建一个库boost hana这需要根据值获取元素索引的功能 constexpr auto tup boost hana make tuple 3 c boost hana type c