jeudi 3 septembre 2020

Two Questions About Lambda Use With boost::adaptors::filtered()

Please consider this non-compiling code:

#include <boost/range/adaptors.hpp>

class Stuff {
 public:
  bool var;
};

class Manager {
 /// Get everything
 std::vector<Stuff*>
 get_all_stuff() const
 {
   return list_of_stuff;
 }

 /// Get a vector of only those that whose "var" matches the "tf" argument.
 std::vector<Stuff*>
 get_some_stuff(const bool tf) const
 {
   return (get_all_stuff() |
     boost::adaptors::filtered(
       [](Stuff const& s) { return (s.var == tf); }
     )
   );
 }

 private:
  std::vector<Stuff*> list_of_stuff;
};

Compilation dies with this error:

ex.cc: In lambda function:
ex.cc:21:46: error: ‘tf’ is not captured
        [](Stuff const& s) { return (s.var == tf); }
                                              ^

1.) How do I bring that function argument into my lambda?

2.) Is this a dangerous approach?

  • I'm NOT worried about the lifetime of the vector returned by "get_all_stuff()".
  • I AM worried about the lifetime of the vector returned by "get_some_stuff()".

Aucun commentaire:

Enregistrer un commentaire