gpt4 book ai didi

c++ 使用 std::function 指向成员函数的指针

转载 作者:行者123 更新时间:2023-11-28 01:50:37 25 4
gpt4 key购买 nike

我知道这个问题已经被问过很多次了,大多数答案对我来说都很难理解。你能帮我弄清楚我做错了什么吗?

#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include <functional>

class A{
public:
A(double i){
_b = i;
}
double square(double i){

return i*i*_b;
}


private:
double _i;
double _b;
};

double cube(double (*objfunc)(double), double x){
return objfunc(x)*x;
}

int main()
{
double v = 2.0;
A a(v);

using std::placeholders::_1;
std::function<double(double)> f_square = std::bind( &A::square, &a, _1 );
double x = cube(f_square,3.0);
std::cout << " x = " << x << std::endl;


}

一如既往地感谢您的建议。

给定类 A 和立方体函数,我如何在主函数中使用立方体函数?

更新:唯一的方法是修改:

double cube(std::function<double(double)> objfunc, double x){
return objfunc(x)*x;
}

最佳答案

使 cube 采用 std::function 对象而不是函数指针。同时摆脱 std::bind 并使用 lambda 和 auto 的魔力。

#include <iostream>
#include <functional>

class A
{
public:
A(double i) : _b(i) {}
double square(double i) { return i*i*_b; }
private:
double _b;
};

double cube(std::function<double(double)> objfunc, double x)
{
return objfunc(x)*x;
}

int main()
{
double v = 2.0;
A a(v);

auto f_square = [&a] ( double x ) { return a.square(x); };
double x = cube(f_square,3.0);
std::cout << " x = " << x << std::endl;
}

关于c++ 使用 std::function 指向成员函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43163784/

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