C++20 概念:元素可迭代概念

2023-11-21

我正在尝试创造一个概念ElementIterable它可以确定类型是否是嵌套范围。例如,中的元素std::vector<int>不是可迭代的,但是元素 (std::vector<int>) in std::vector<std::vector<int>>是可迭代的。关于使用的想法std::iterator_traits<T>我脑海中浮现出实验代码如下。然而,这ElementIterable概念无法按预期行为发挥作用。有什么想法可以解决这个问题吗ElementIterable概念?

template<typename T>
concept ElementIterable = requires(typename std::iterator_traits<T>::value_type x)                        //  requires-expression
{
    x.begin();          // must have `x.begin()`
    x.end();            // and `x.end()`
};

这个的用法ElementIterable在这儿。

template<typename T> requires ElementIterable<T>
void Foo(T input);

template<typename T> requires ElementIterable<T>
void Foo(T input)
{
    std::cout << "Element iterable" << std::endl;
}

template<typename T>
void Foo(T input);

template<typename T>
void Foo(T input)
{
    std::cout << "Element not iterable" << std::endl;
}

函数的使用Foo.

int number = 1;
    
std::vector<decltype(number)> vector1;
vector1.push_back(number);
Foo(vector1);           //  Element not iterable

std::vector<decltype(vector1)> vector2;
vector2.push_back(vector1);
Foo(vector2);           //  Element not iterable
                        //      but expected behaviour is: Element iterable

欢迎所有建议。


如果您想询问某个类型是否是一个范围,而该范围本身又包含一个范围,那么只需应用std::range输入两次:

template<typename T>
concept nested_range = std::ranges::range<T> && std::ranges::range<std::ranges::range_value_t<T>>

range_value_t提取出value_type来自范围的迭代器类型。这是一个活生生的例子.

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

C++20 概念:元素可迭代概念 的相关文章

随机推荐

  • matplotlib:绘制闭合线

    我画了一个图如下 plt plot lon lat ro plt show 但线路并未关闭 如何使它们闭合为多边形 谢谢 Use matplotlib pyplot fill lon lat fill False 代替plot See ht
  • 如何在共享主机环境中安装phpMailer?

    如何安装phpMailer在共享托管环境中 我需要用它来验证电子邮件和更改用户的密码 你可以在这里下载 https github com PHPMailer PHPMailer 将文件夹上传到您的服务器并包含以下行的主文件 之后 您将需要一
  • 在ubuntu中安装octave包

    任何人都可以帮助我解决这个错误吗 octave 4 gt pkg install signal 1 2 0 tar gz error the following dependencies where unsatisfied signal n
  • ifstream::read 不附加 '\0'

    ifstream read只是读n字节放入缓冲区 但不追加 0 在缓冲区的末尾 对吧 那么当我使用缓冲区时 它如何知道缓冲区的结尾呢 我应该手动附加一个 0 在缓冲区的末尾 The ifstream用于读取文件 二进制文件或文本 处理二进制
  • 在 SimpleXML for PHP 中删除具有特定属性的子项

    我有几个具有不同属性的相同元素 我正在使用 SimpleXML 访问这些元素
  • 运行时 Autofac 绑定

    我目前使用 Autofac 进行简单的构造函数注入 没有任何问题 然而我想知道的是如何在运行时解决依赖关系 下面的示例显示了导出文档的多种方式 通过简单的构造函数注入 IExport 的具体实现在运行时得到解决 但是 需要做的是解析下拉列表
  • sklearn:如何加速矢量化器(例如Tfidfvectorizer)

    在彻底分析我的程序之后 我已经能够确定它被矢量化器减慢了 我正在处理文本数据 两行简单的 tfidf 一元向量化占用了代码执行总时间的 99 2 这是一个可运行的示例 这会将 3mb 的训练文件下载到您的磁盘 省略 urllib 部分以在您
  • 将参数从jsp传递到Spring Controller方法

    我正在使用 Hibernate 的 Spring MVC 应用程序中工作 在 JSP 页面中 我有一个函数列出数据库中存储的值 当前是所有值 我写了一个方法 其中列表仅限于 JSP 文件中传递的 ID 我的 HQL 查询工作正常 所以我知道
  • 值reduceByKey不是org.apache.spark.rdd.RDD的成员

    很伤心 我的spark版本是2 1 1 Scala版本是2 11 import org apache spark SparkContext import com mufu wcsa component dimension Dimension
  • jQuery 滚动到页面底部

    当您单击某个链接时 我使用以下内容滚动到页面顶部 myLinkToTop click function html body animate scrollTop 0 slow return false 我想创建另一个滚动到页面底部的链接 以下
  • 如何选择 maven-gpg-plugin 用于签署工件的 GnuPG 密钥?

    我正在使用 maven gpg plugin 来签署 Maven 工件 这工作正常 但我的 GnuPG 密钥环中有几个密钥 并且想要使用与 GnuPG 选择的密钥不同的密钥 如果有多个键 GnuPG 如何选择 默认 键 是否可以指定在 ma
  • Play 2.0 框架,使用带有经过身份验证的请求的 BodyParser

    我希望能够在经过身份验证的请求上使用 BodyParser 但如果我的身份验证像 ZenTasks 示例那样设置 我很难弄清楚如何做到这一点 我的验证方法 def IsAuthenticated f gt String gt Request
  • 我可以将 Eclipse 设置为忽略“未处理的异常类型”吗

    是否有可能让 Eclipse 忽略错误 未处理的异常类型 在我的具体情况下 原因是我已经检查过该文件是否存在 因此我认为没有理由放入 try catch 语句 file new File filePath if file exists Fi
  • Ant 替换属性文件中的令牌

    我想用 Ant 替换源文件中的标记 some test foo other text 令牌包含在属性文件中 例如 foo 1 实际上 如果源文件中的标记类似于 foo 或 foo 那么这很容易 但我无法替换整个标记 foo 几年前我成功了
  • 如何在python中查找文件系统类型

    我正在 python 中寻找一种方法来找出给定路径使用哪种类型的文件系统 我想以跨平台的方式做到这一点 在linux上我可以抓取输出df T但这不适用于 OSX 或 Windows 请注意 不同的平台实际上是不同的 Use lsvfs在 M
  • 我可以将 MySQL 时间戳与日期时间列进行比较吗?是不是很糟糕?

    因此 我有一个表 其中列 ABC 是时间戳 BCD 是日期时间 如果我这样做 SELECT FROM myTable WHERE ABC gt BCD 是不是很糟糕 会影响性能吗 它们在性能方面如何比较 是的 您可以比较datetime w
  • ng-class 不会触发自定义指令

    我目前正在开发一个滑动菜单指令对于 AngularJS javascript 由三种类型的指令组成 每种类型的滑动菜单的指令 为简洁起见 我只包含左侧滑动菜单 一个用于屏幕其余部分的包装器指令 asm包装器 和一个控制按钮指令 汇编控制 目
  • android 是否有向 Google keep 添加数据的意图

    android 是否有向其中添加数据的意图谷歌保留 可以通过新的 Intent Intent ACTION SEND 实现 有一种技术可以通过编程方式选择适当的应用程序 而不是显示可能性 测试
  • Grails GGTS IDE GrailsProcessDiedException:Grails 进程终止

    我在 GGTS IDE 上遇到了以下奇怪的异常 Command terminated with an exception org grails ide eclipse longrunning client GrailsProcessDied
  • C++20 概念:元素可迭代概念

    我正在尝试创造一个概念ElementIterable它可以确定类型是否是嵌套范围 例如 中的元素std vector