我知道这已被多次询问,大部分答案都让我难以理解。 你能不能帮我弄清楚我做错了什么?
#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类和立方体函数,因为它们如何在main函数中使用cube函数?
更新:只有这样才能修改:
double cube(std::function<double(double)> objfunc, double x){
return objfunc(x)*x;
}
答案 0 :(得分:2)
使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;
}