有时候,我们需要根据各种不同的条件去查找某个对象里是否含有特定条件的数据。然后返回给业务使用,譬如,我们有一个名字库,我们需要查找是否含有.cao 结尾的。.test结尾的名字,那传统的可能就是一个类提供两个接口,那如果条件越多。是不是接口越来越多。太麻烦了。我们可以用lambda来解决问题,代码如下(代码中的中括号,用间括号代替):
class UserList
{
public:
template[typename Func]
std::vector[std::string] findMatchingUsers(Func func)
{
std::vector[std::string] results;
for (auto it : _users) {
if (func(it))
{
results.push_back(it);
}
}
return results;
}
private:
std::vector[std::string] _users;
};
使用:
UserList global_user_list;
return global_user_list.findMatchingUsers(
[](const string& user) { return user.find(".cao") != string::npos; }
);