#include <vector>
#include <string>
#include <iostream>
#include <boost/function.hpp>
#include <boost/bind.hpp>
using namespace std;
struct constrain{
typedef boost::function<double(vector <double> &x_var)> callback_t;
string name;
int direction;
callback_t evaluate;
};
double func1(constrain *obj, vector<double> &p) {
cout << obj->name << ", " << obj->direction << ", " << p.size() << endl;
}
int main() {
constrain ob;
ob.name = "o";
ob.direction = 1;
vector<double> v(5);
ob.evaluate = boost::bind(&func1, &ob, _1);
ob.evaluate(v);
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uLmhwcD4KI2luY2x1ZGUgPGJvb3N0L2JpbmQuaHBwPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBjb25zdHJhaW57CiAgdHlwZWRlZiBib29zdDo6ZnVuY3Rpb248ZG91YmxlKHZlY3RvciA8ZG91YmxlPiAmeF92YXIpPiBjYWxsYmFja190OwogIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU7CiAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjsKICBjYWxsYmFja190IGV2YWx1YXRlOwp9OwoKZG91YmxlIGZ1bmMxKGNvbnN0cmFpbiAqb2JqLCB2ZWN0b3I8ZG91YmxlPiAmcCkgewogIGNvdXQgPDwgb2JqLT5uYW1lIDw8ICIsICIgPDwgb2JqLT5kaXJlY3Rpb24gPDwgIiwgIiA8PCBwLnNpemUoKSA8PCBlbmRsOwp9CgppbnQgbWFpbigpIHsKICBjb25zdHJhaW4gb2I7CiAgb2IubmFtZSA9ICJvIjsKICBvYi5kaXJlY3Rpb24gPSAxOwogIHZlY3Rvcjxkb3VibGU+IHYoNSk7CgogIG9iLmV2YWx1YXRlID0gYm9vc3Q6OmJpbmQoJmZ1bmMxLCAmb2IsIF8xKTsKICBvYi5ldmFsdWF0ZSh2KTsKfQ==