【发布时间】:2021-02-12 11:00:50
【问题描述】:
我想升级我的自定义容器以兼容 std::ranges 算法,例如 find_if 和其他算法,如下所示
auto is_satisfy = [](CustomContainer::value_type x) { ... };
std::ranges::find_if(custom_container, is_satisfy);
// instead of std::find_if(custom_container.begin(), custom_container.end(), is_satisfy);
std::ranges::find_if 的签名像
struct find_if_fn {
template< ranges::input_range R,
class Proj = std::identity,
std::indirect_unary_predicate<std::projected<ranges::iterator_t<R>,
Proj>> Pred >
constexpr ranges::borrowed_iterator_t<R>
operator()( R&& r, Pred pred = {}, Proj proj = {} ) const
{
return (*this)(ranges::begin(r), ranges::end(r), std::ref(pred), std::ref(proj));
}
};
input_range concept 是什么以及我自己的自定义容器如何支持此功能?
【问题讨论】:
标签: c++ c++20 c++-concepts std-ranges