C++20 Concepts: Element iterable concept(C++20概念:元素可迭代概念)
本文介绍了C++20概念:元素可迭代概念的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试创建一个概念ElementIterable,它可以确定类型是否为嵌套区域。例如,std::vector<int>中的元素是不可迭代的,但std::vector<std::vector<int>>中的元素(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。Here's a live example。
这篇关于C++20概念:元素可迭代概念的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:C++20概念:元素可迭代概念
基础教程推荐
猜你喜欢
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 我有静态或动态 boost 库吗? 2021-01-01
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 常量变量在标题中不起作用 2021-01-01
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- 这个宏可以转换成函数吗? 2022-01-01
- 在 C++ 中计算滚动/移动平均值 2021-01-01
