使用std :: bind绑定std :: any_of中的bool成员函数?

时间:2014-05-21 19:51:02

标签: c++11

(这是一个人为的例子)

我想在std::is_any上计算empty()的{​​{1}}。

我可以用lambda表达式来实现:

std::vector<std::vector>

对我来说,lambda看起来不必要的丑陋。有没有办法在这种情况下使用std::any_of(vecs.begin(), vecs.end(), [](std::vector<T> const &v) { return v.empty(); });

4 个答案:

答案 0 :(得分:2)

我知道你要求std::bind,但你可以用std::mem_fn轻松做同样的事情:

std::any_of(begin(vecs), end(vecs), std::mem_fn(&std::vector<T>::empty));

(在我看来,仍然不像lambda那么干净。)

答案 1 :(得分:1)

Challenge accepted

std::any_of(vecs.begin(), vecs.end(), 
    std::bind(&std::vector<T>::empty, std::placeholders::_1));

答案 2 :(得分:1)

以下使用std::mem_fn代替std::bind,使用GCC-4.9测试:

std::any_of(vecs.begin(), vecs.end(), std::mem_fn(&std::vector<T>::empty));

答案 3 :(得分:0)

我建议这可能就足够了但是我们还是会使用更丑陋的语法

bool is_empt(vector<int>&  p){
    return p.empty();
}
int main (){
    // placeholders and bind function TRY 
    vector<vector<int>> v ;
    v.resize(5);
    auto fn = std::bind(is_empt , placeholders::_1);
    if (std::any_of(all(v) , [fn] (std::vector<int>  &v1) {return fn(v1);}))
        cout << "True\n";
    return 0;
}