(这是一个人为的例子)
我想在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(); });
?
答案 0 :(得分:2)
我知道你要求std::bind
,但你可以用std::mem_fn
轻松做同样的事情:
std::any_of(begin(vecs), end(vecs), std::mem_fn(&std::vector<T>::empty));
(在我看来,仍然不像lambda那么干净。)
答案 1 :(得分:1)
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;
}