2014-03-02 104 views
0

我有一个简单的代码函数指针麻烦

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)的常量” 不能被分配给类型的实体 “INT(A ::)(const int的&)常量”

它是如何正确的?

回答

1

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

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

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