可以使用指向函数或仿函数的指针(例如来自 boost)。
尝试这样的事情:
struct constrain{
string name;
int direction;
double (*evaluate) (vector <double> &x_var);
};
或者
struct constrain{
string name;
int direction;
boost::function<double(vector &<double>)> evaluate;
};
请注意,这不会有任何指向调用它的“对象”的指针,因此您必须添加适当的参数(为了方便起见,可能还需要 typedef ):
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);
}
};
检查http://ideone.com/VlAvD的使用情况。
boost::function
如果使用and boost::bind
(std::*
如果您使用带有 C++11 的编译器,则使用等价物)可能会简单得多:http: //ideone.com/wF8Bz