C++ 将的所有_与lambda函数集合一起使用?

C++ 将的所有_与lambda函数集合一起使用?,c++,lambda,c++17,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) {

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

...
模板
布尔滤波器(常数T和滤波器,int-val)
{
//可以使用std::all_of()吗?
用于(自动过滤器:过滤器)
{
如果(!过滤器(val))
{
返回false;
}
}
返回true;
}
int main()
{
////////////////////////////////////////
使用FilterContainer=std::vector;
过滤器容器LX过滤器;
lxFilters.emplace_back([&](int val){return val%5==0;});
lxFilters.emplace_back([&](int val){return val>=10;});

lxFilters.emplace_back([&](int val){return val可以通过以下方式实现:

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);
     });
}
模板
布尔滤波器(常数T和滤波器,int-val)
{
返回std::所有(std::begin(过滤器)、std::end(过滤器),
[val](常量自动和函数)
{
返回函数(val);
});
}

由于要为任何不满足要求的筛选器返回false,因此需要使用std::any\u of

模板
布尔滤波器(常数T和滤波器,常数int val)
{
返回std::任意(std::begin(过滤器)、std::end(过滤器),
[val](常量自动和筛选){返回!筛选(val);});
}

与原始代码相比,lambda的参数将谓词命名为“func”,在本例中,它将是我们从集合范围中操作的元素(例如,如果它是
const auto&filter
而不是
const auto&func
)?@AaronStackpole是的,func lambda参数是“filters”的元素收集
template<typename T>
bool filter(const T& filters, const int val)
{
    return std::any_of(std::begin(filters), std::end(filters),
        [val](const auto& filter){return !filter(val);});
}