c++ - 将 all_of 与 lambda 函数集合一起使用?

标签 c++ lambda c++17

就目前而言,此代码可以工作并检查每个值是否与 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/

相关文章:

c++ - 在std::function中获取std::future的结果类型

c++ - 操作中的整数溢出

linq - 组合多个表达式 (Expression<Func<T,bool>>) 不适用于变量。为什么?

c# - 在 C# 中调用在其参数中使用表达式和委托(delegate)的扩展方法

c++ - Lambda 和线程

visual-studio-2017 - VS2017 : E0135 namespace "std" has no member "filesystem"

c++ - 具有结构的列表映射(包含列表)——无法通过映射访问结构内的列表

javascript - 将 JavaScript split()-slice()-join() 序列转换为 C++

c++ - 如何正确比较 std::string 和 ""?

c++ - 将 unicode sf::String 传递到 std::filesystem::u8path