Range concept for a specific type(特定类型的范围概念)
本文介绍了特定类型的范围概念的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否已定义概念,用于在C++20或Range-TS中指定特定类型的范围?
类似:
template < class T, class InnerType >
concept RangeOf =
requires(T&& t) {
requires std::same_as<
std::remove_cvref_t<decltype(*std::ranges::begin(t))>,
InnerType
>;
std::ranges::end(t);
};
要允许,for example:
void print(const RangeOf<char> auto& char_seq) { /* ... */ }
推荐答案
没有。
该特定概念的拼写方式为:
template <typename R, typename V>
concept RangeOf = range<R> && same_as<range_value_t<R>, V>;
但后来发现,您可能还想要检查一些非常密切相关的东西。您可能实际上希望查看reference
类型,而不是value_type
类型。可能是:
template <typename R, typename V>
concept RangeOf = range<R> && same_as<range_reference_t<R>, V>;
原因是:您认为vector<char>&
是char
的范围还是char&
的范围?可以说,它更像是后者,而正是后者推动了更多的使用。但前者并不是错的,它也是有用的,只是方式不同而已。
然后,您必须讨论您想要same_as
还是convertible_to
。在某些算法中,您可能希望将其限制为前者,而在某些算法中,后者则足够好。对我来说,这是想要概念模板参数的动机之一,以便:
template <typename R, template <typename> concept C>
concept RangeOf = range<R> && C<range_value_t<R>>;
以便我可以根据实际需要轻松编写RangeOf<same_as<char>>
或RangeOf<convertible_to<char>>
。
所有这一切都是说,很难知道我们真正想要的东西是什么,这就是为什么不存在这样的东西。但每个有用的具体内容都很容易编写,因此缺少这样的内容对用户来说并不是一个特别大的负担。
这篇关于特定类型的范围概念的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:特定类型的范围概念
基础教程推荐
猜你喜欢
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 运算符重载的基本规则和习语是什么? 2022-10-31