就目前而言,此代码可以工作并检查每个值是否与 FilterCollection 中的所有过滤器匹配,是否可以在这种情况下使用 all_of(any_of、none_of 等)来稍微压缩此函数更多?
template<typename T>
bool filter(const T& filters, int val)
{
// Can use std::all_of() somehow?
for (auto filter : filters)
{
if (!filter(val))
{
return false;
}
}
return true;
}
int main()
{
////////////////////////////////////////
using FilterContainer = std::vector<std::function<bool(int)>>;
FilterContainer lxFilters;
lxFilters.emplace_back([&](int val) { return val % 5 == 0; });
lxFilters.emplace_back([&](int val) { return val >= 10; });
lxFilters.emplace_back([&](int val) { return val <= 100; });
using FilterResults = std::vector<bool>;
FilterResults filteredValues;
filteredValues.push_back(filter(lxFilters, 5)); // False
filteredValues.push_back(filter(lxFilters, 10)); // True
filteredValues.push_back(filter(lxFilters, 50)); // True
filteredValues.push_back(filter(lxFilters, 100)); // True
filteredValues.push_back(filter(lxFilters, 42)); // False
...
最佳答案
可以通过以下方式实现:
template<typename T>
bool filter(const T& filters, int val)
{
return std::all_of(std::begin(filters), std::end(filters),
[val](const auto& func)
{
return func(val);
});
}
关于c++ - 将 all_of 与 lambda 函数集合一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55759693/