#include <vector>
#include <string>
#include <iostream>
using namespace std;
struct constrain{
typedef double (*callback_t) (constrain *obj, vector <double> &x_var);
string name;
int direction;
callback_t evaluate_f;
// helper function
double evaluate(vector <double> &x_var) {
return evaluate_f(this, x_var);
}
};
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_f = &func1;
ob.evaluate_f(&ob, v);
ob.evaluate(v);
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBjb25zdHJhaW57CiAgdHlwZWRlZiBkb3VibGUgICgqY2FsbGJhY2tfdCkgKGNvbnN0cmFpbiAqb2JqLCB2ZWN0b3IgPGRvdWJsZT4gJnhfdmFyKTsKICBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOwogIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb247CiAgY2FsbGJhY2tfdCBldmFsdWF0ZV9mOwoKICAvLyBoZWxwZXIgZnVuY3Rpb24KICBkb3VibGUgZXZhbHVhdGUodmVjdG9yIDxkb3VibGU+ICZ4X3ZhcikgewogICAgcmV0dXJuIGV2YWx1YXRlX2YodGhpcywgeF92YXIpOwogIH0KfTsKCmRvdWJsZSBmdW5jMShjb25zdHJhaW4gKm9iaiwgdmVjdG9yPGRvdWJsZT4gJnApIHsKICBjb3V0IDw8IG9iai0+bmFtZSA8PCAiLCAiIDw8IG9iai0+ZGlyZWN0aW9uIDw8ICIsICIgPDwgcC5zaXplKCkgPDwgZW5kbDsKfQoKaW50IG1haW4oKSB7CiAgY29uc3RyYWluIG9iOwogIG9iLm5hbWUgPSAibyI7CiAgb2IuZGlyZWN0aW9uID0gMTsKICB2ZWN0b3I8ZG91YmxlPiB2KDUpOwoKICBvYi5ldmFsdWF0ZV9mID0gJmZ1bmMxOwogIG9iLmV2YWx1YXRlX2YoJm9iLCB2KTsKICBvYi5ldmFsdWF0ZSh2KTsKfQ==