我有一个简单的代码
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"
的实体它是如何正确的?
答案 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);