【问题标题】:Class member function pointer that uses another class member [duplicate]使用另一个类成员的类成员函数指针[重复]
【发布时间】:2013-02-19 01:41:10
【问题描述】:

我正在尝试编写一个代码来查找函数的数值推导。 我还有一个多项式类,描述如下:

    class polynomial
    {
    public:
        polynomial(Vector, int);
        polynomial();
        ~polynomial();

        double returnValue(double);
        void print();

    private:
        int Degree;
        Vector Coeficients;
    };

我的数值推导有以下原型:

 double numericalDerivation( double (*F) (double), double x);

我想把returnValue方法传入numericalDerivation,可以吗?

【问题讨论】:

  • 没有。 returnValue 不是函数,即您不能 调用 它。在这个网站上搜索数百个关于如何处理成员函数指针的重复内容。
  • 其实returnValue是一个函数,而是一个成员函数。 numericalDerivation 需要一个函数指针,而不是一个成员函数指针(那将是不同的类型)。

标签: c++ class methods function-pointers


【解决方案1】:

是的,这是可能的,但不要忘记它是一个 member 函数:如果没有(指向)polynomial 类型的对象,您将无法调用它调用它。

你的函数的签名应该是这样的:

double numericalDerivation(double (polynomial::*F)(double), polynomial* p, double x)
{
    ...
    (p->*F)(x);
    ...
}

以下是调用它的方式:

double d = ...;
polynomial p;
numericalDerivation(&polynomial::returnValue, &p, d);

或者,您可以使用std::function<> 对象作为函数的参数,并让std::bind() 负责将该对象绑定到成员函数:

#include <functional>

double numericalDerivation(std::function<double(double)> f, double x)
{
    ...
    f(x);
    ...
}

...

double d = ...;
polynomial p;
numericalDerivation(std::bind(&polynomial::returnValue, p, std::placeholders::_1), d);

【讨论】:

  • 感谢您的解决方案,如果我使用重载,第一个解决方案也有效,我尝试了第二个解决方案并收到以下错误:术语不评估为采用 1 个参数的函数,它现在可以工作,谢谢!!
  • @LucasDaRochaSouza:等等,它是否有效?
  • 抱歉给您带来了困惑,现在可以使用了,谢谢。
  • @LucasDaRochaSouza:好的。如果有帮助,请考虑接受或至少赞成这个答案。
  • 顺便说一句,你有什么建议可以让我了解更多关于 除了参考网站吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 2013-04-10
  • 2022-01-10
  • 2017-07-27
  • 2013-06-06
相关资源
最近更新 更多