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());
};