2014-02-28 127 views
1

所以我有C++这需要在其他功能的功能:我可以传递一个类的成员函数作为函数参数吗?

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

我也有有一个成员函数f类:

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

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

Test A; 
integral(A.myfun); 

我甚至会想这进一步采取并调用类的测试中不可或缺的,利用自身的成员函数作为输入!

谢谢!

+0

我从来没有需要,也不确定你可以。我为静态函数执行此操作,但对于常规成员函数,我安排使用多态或函数对象的东西。 – Bathsheba

+0

你的“积分”功能是你自己的吗?你能修改它,接受其他类型吗? – hvd

+0

在这个例子中,是的。但对于真正的问题,这个功能并不是我可以轻易改变的。 – kchow462

回答

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)); 

或简单地传递一个拉姆达,

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

如果您没有C++ 11支持,您可以使用boost库并获取boost :: bind。 – dutt

相关问题