gpt4 book ai didi

c++ - 一个类应该使用函数指针调用另一个类的方法

转载 作者:太空宇宙 更新时间:2023-11-04 11:40:38 25 4
gpt4 key购买 nike

我已咨询(免责声明):

为了说明我的问题,我将使用这段代码(已更新)

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

有没有办法调用方法“Value”?我调用函数没有问题(没有类)

typedef double (*FunctionValuePtr)(double x);

但这对上面的例子没有帮助。我需要明确的方法名称。大多数示例使用静态方法。我不能使用静态方法。

最佳答案

您可以使用 <functional> STL 的标题:

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) .您还可以将占位符与固定参数交换。

关于c++ - 一个类应该使用函数指针调用另一个类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21582223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com