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))));
}