
On Sat, Sep 15, 2012 at 6:26 AM, Sohail Somani <sohail@taggedtype.net> wrote:
On 15/09/2012 2:16 AM, Lorenzo Caminiti wrote:
Lorenzo, thanks for volunteering but the design and implementation is far more complex than the extract from the doc. If we want it to be efficient, it shouldn't use boost.function, boost/multi_index/detail/scope_guard.hpp should be a good staring point.
I see. Then (speaking personally) it might make sense for it to exist in a lib as its impl is not trivial due to the optimization efforts. However, I probably won't have time to add this feature to Scope Exit...
Ahhhh!
The needed class is already part of scope exit.
What's there as boost::scope_exit::aux::guard is similar to what shown in the examples as scope_exit but it uses the operator= and it has a default constructor instead of using the constructor to initialize the functor. It is used to implement the Scope Exit macros using C++11 lambdas but only if !BOOST_NO_LAMBDA and BOOST_SCOPE_EXIT_CONFIG_USE_LAMBDAS--see the bottom of this subsection: http://www.boost.org/doc/libs/1_51_0/libs/scope_exit/doc/html/scope_exit/tut...
Just add a dismiss function,
I wouldn't add the dismiss functionality. That is not always needed with RAII and the Scope Exit API is more generic without it. If users need such functionality, they can use a commit/dismiss variable external to Scope Exit to simply implement it: struct scope_exit { scope_exit(std::function<void (void)> f) : f_(f) {} ~scope_exit(void) { f_(); } private: std::function<void (void)> f_; }; bool commit = false; persons_.push_back(a_person); scope_exit on_exit1([&commit, this]() { if(!commit) persons_.pop_back(); });
take it out of aux/detail and I WILL BE YOUR UNCLE, forget about Bob.
Forget the optimization. Boost Scope.Exit doesn't use any of these tricks right? It's already using a boost function.
Lorenzo my man, just add it.
As I said I could but only if it's about adding something as simple as the above scope_exit... I'm not sure if that's enough. HTH, --Lorenzo