【发布时间】:2017-08-27 02:08:26
【问题描述】:
我知道这个问题已经被问过很多次了,大部分答案我都很难理解。 你能帮我弄清楚我做错了什么吗?
#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;
}
【问题讨论】:
-
您正在尝试传递
std::function实例,其中需要一个普通的函数指针。前者不可转换为后者。 -
能否请您帮我修改主要功能以使其正常工作。使用 square 函数的正确方法是什么?
-
我认为它不能做到,因为成员函数指针不是简单的指针。但我的理解非常有限。所以让我们等待专家进来。
-
您不能只修改
main并使其工作:无论您如何用力推,方钉都无法装入圆孔。您可以修改cube以采用std::function<double(double)>参数。 -
我同意。谢谢
标签: c++ function c++11 pointers