我咨询(免责声明):
为了说明我的问题,我将使用此代码(更新)
#include <iostream>
#include <cmath>
#include <functional>
class Solver{
public:
int Optimize(const std::function<double(double,double>& function_to_optimize),double start_val, double &opt_val){
opt_val = function_to_optimize(start_val);
return 0;
}
};
class FunctionExample{
public:
double Value(double x,double y)
{
return x+y;
}
};
int main(){
FunctionExample F =FunctionExample();
Solver MySolver=Solver();
double global_opt=0.0;
MySolver.Optimize(std::bind(&FunctionExample::Value, &F, std::placeholders::_2),1,global_opt);
return 0;
}
有没有办法调用方法“值”?我没有问题调用函数(没有类)
typedef double (*FunctionValuePtr)(double x);
但这对上面的例子没有帮助。我需要显式的方法名称。大多数示例使用静态方法。我不能使用静态方法。
答案 0 :(得分:1)
您可以使用STL的<functional>
标题:
double Gradient(const std::function<double(double)>& func, double y)
{
const double h = 1e-5;
return (func(y+h) - func(y)) / h;
}
std::cout << D.Gradient(std::bind(&Root::Value, &R, std::placeholders::_1), 8) << std::endl;
也像Joachim Pileborg评论你在main中声明函数,所以你需要删除()
。
编辑:
要为bind提供固定参数,您可以执行以下操作:
int Optimize(const std::function<double(double)>& function_to_optimize, double &opt_val){
opt_val = function_to_optimize(opt_val);
return 0;
}
MySolver.Optimize(std::bind(&FunctionExample::Value, &F, std::placeholders::_1, 1), global_opt);
这将调用F.Value(opt_val, 1)
。您还可以使用固定参数交换占位符。