Listing 5: Using bind.
#include <boost/lambda/lambda.hpp> #include <boost/lambda/exceptions.hpp> #include <boost/lambda/bind.hpp> class missile_error : public std::exception { public: virtual const char* what() { return "This missile has gone bad."; } }; class missile { bool broken_; public: void fire() { if (broken_) throw missile_error(); std::cout << "Gone like the wind\n"; } void destroy() { broken_=true; } }; int main() { using namespace boost::lambda; std::vector<missile> vec; for (int i=0;i<10;++i) vec.push_back(missile()); vec[4].destroy(); // Here we go for_each( vec.begin(), vec.end(), try_catch( bind(&missile::fire,_1),catch_exception<missile_error>( std::cout << constant("Caught missile_error: ") << bind(&std::exception::what, _e)))); }