我可以将类的成员函数作为函数参数传递吗?

时间:2014-02-28 06:18:02

标签: c++ function member

所以我在C ++中有一个函数,它接受另一个函数:

double integral(double (*f)(double x){...};

我还有一个具有成员函数f的类:

 class Test{
 public:
     double myfun(double x){...};
 };

我希望能够使用类Test的成员函数myfun调用积分函数。有没有办法做到这一点?例如,是否可以执行以下操作:

 Test A;
 integral(A.myfun);

我甚至想更进一步,在类Test中调用integral,使用自己的成员函数作为输入!

谢谢!

1 个答案:

答案 0 :(得分:2)

没有;普通函数指针不能将地址存储到非静态成员函数中。您可以考虑以下两种解决方案。

1)使myfun静止。然后integral(A::myfun)应该编译。

2)如果你有C ++ 11支持,请使integral函数采用一般的函子类型,

template<typename Functor>
double integral(Functor f) { ... };

并绑定Test的实例以创建仅以double作为参数的函数对象,

Test A;
integral(std::bind(&Test::myfun, A, std::placeholders::_1));

或简单地传递一个lambda,

Test A;
integral([&A](double x){ return A.myfun(x); });