0
我想用谓词boost::filter_iterator
,看起来像这样:升压filter_iterator有没有缺省构造谓词
template<class tuple_t>
struct exactly {
tuple_t expected;
exactly(tuple_t&& expected) : expected(expected) {}
exactly(const tuple_t& expected) : expected(expected) {}
template<class actual_tuple_t, class I = make_index_sequence<tuple_size<tuple_t>::value>>
bool operator()(actual_tuple_t&& actual) const noexcept {
return compare_tuples_detail(equals(), expected, forward<actual_tuple_t>(actual), I());
}
};
正如你可能已经猜到,我想这对我的容器中的元素比较存储的参考称为expected
的元素。
显然,我不能将exactly
作为类型参数传递给boost::make_filter_iterator
,因为它不是默认的可构造的。而且我没有线索如何构建类传递给它像嘿,我实例为你,只需要调用它的operator()
!
这是我会用它的地方:
template<class predicate_t, class vector_t>
decltype(auto) filter_impl(vector_t&& v) noexcept {
auto good = boost::make_iterator_range(
boost::make_filter_iterator<predicate_t>(begin(forward<vector_t>(v)), end(forward<vector_t>(v))),
boost::make_filter_iterator<predicate_t>(end(forward<vector_t>(v)), end(forward<vector_t>(v)))
);
return remove_reference_t<vector_t>(good.begin(), good.end());
};