Lambda函数的用处
假设你设计了一个地址簿的类。如今你要提供函数查询这个地址簿,可能根据姓名查询,可能根据地址查询,还有可能二者结合。要是你为这些状况都写个函数,那么你必定就跪了。因此你应该提供一个接口,能方便地让用户自定义本身的查询方式。在这里能够使用lambda函数来实现这个功能。
- #include <string>
- #include <vector>
-
- class AddressBook
- {
- public:
-
-
- template<typename Func>
- std::vector<std::string> findMatchingAddresses (Func func)
- {
- std::vector<std::string> results;
- for ( auto itr = _addresses.begin(), end = _addresses.end(); itr != end; ++itr )
- {
-
- if ( func( *itr ) )
- {
- results.push_back( *itr );
- }
- }
- return results;
- }
-
- private:
- std::vector<std::string> _addresses;
- };
从上面代码能够看到,findMatchingAddressses函数提供的参数是Func类型,这是一个泛型类型。在使用过程当中应该传入一个函数,而后分别对地址簿中每个entry执行这个函数,若是返回值为真那么代表这个entry符合使用者的筛选要求,那么就应该放入结果当中。那么这个Func类型的参数如何传入呢?
- AddressBook global_address_book;
-
- vector<string> findAddressesFromOrgs ()
- {
- return global_address_book.findMatchingAddresses(
-
- [] (const string& addr) { return addr.find( ".org" ) != string::npos; }
- );
- }
能够看到,咱们在调用函数的时候直接定义了一个lambda函数。参数类型是
返回值是bool类型。
若是用户要使用不一样的方式查询的话,只要定义不一样的lambda函数就能够了。