功能指针麻烦

时间:2014-03-02 14:48:43

标签: c++ function-pointers type-mismatch

我有一个简单的代码

class a{
public:
     double (a::*fun)(const double &) const;
     //
     ....
     //
};

class b{
public:
    a c1;
    double f(const double & x) const{
        return 0;
    }

    b(){
        c1.fun = f;
    }
};

它意味着课程" a"必须使用某种类型的函数,并且他的工作不依赖于这个函数实现(例如代数插值)。我想要类的参数 - 函数。 但我有一些问题。编译器写

类型为" int(b :: )(const int& x)const"不能分配给类型" int(a :: )(const int&)const"

的实体

它是如何正确的?

2 个答案:

答案 0 :(得分:1)

double (a::*fun)(const double &) const声明指向类a的成员函数的指针,该函数返回double并接收const double&

在您的示例中,您尝试分配在类b中定义的函数。这就是你得到错误的原因。

答案 1 :(得分:1)

也许模板可以解决这个问题:

template <typename T>
struct Params
{
    double (T::* fun)(const double &) const;
    // ...
};


class B
{
    Params<B> params;

    double f(const double &) const;

public:
    B() : params(&B::f) { }
    // ...
};

要在当前实例的B的非静态成员函数中的某处调用函数,您会说:

double d;
(this->*params.fun)(d);