我想编写一个接受MyType-typed 值范围的函数模板,所以我写了
void f(const std::ranges::range auto& my_range) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
不幸的是,这并不限制范围内包含的值的类型。requires我可以在函数体块之前使用一个子句,但我想要一些可重用的东西,而不是特定于该函数的。
自然我写了
template <class T, class V>
concept range_of = std::ranges::range<T> && std::is_same_v<V, std::ranges::range_value_t<T>>;
void f(const range_of<MyType> auto& my_range) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
但令我感到非常惊讶的是,考虑到它看起来多么自然,标准库并不支持开箱即用。这也适用于std::ranges::view我可以写一个类似的view_of概念。
我的定义不range_of完整或者错误吗?或者标准库不提供此功能是否有充分的理由?