C ++ Member函数作为全局函数的参数?

时间:2012-05-04 16:39:12

标签: c++ function-pointers

有没有办法将成员函数作为参数传递给全局函数? 我发现this但它并没有真正解决我的问题。

让我们说我有以下全局功能:

double Function(double (*fEval)(double F1, double F2),double min, double max,int numArgs,...);

bool Function2(double (*fEval1)(double F1, double F2),double (*fEval2)(double F1, double F2),double xmin, double xmax, double ymin, double ymax,double &ax, double &ay,int numArgs,...);

,我的一个成员函数将Function2调用为

Function2(&F1, &F2, 0, m_m1, 0, m_m2, &m_n1, &m_n2,0);

F1和F2是成员函数,Function2调用Function1,但目前我的问题是Function2以及如何正确声明它。

好的,现在我已经设法将我的函数声明更改为

bool Function2(double (CLASS::*)(double F1, double F2),double (CLASS::*)(double F1, double F2),double xmin, double xmax, double ymin, double ymax,double *ax, double *ay,int numArgs,...)

我可能只遇到一个问题,当我试图调用已被CLASS :: *替换的函数fEval1和fEval2时,我怎么能调用这个函数中的第一个和第二个成员函数?

2 个答案:

答案 0 :(得分:4)

成员函数指针与普通函数指针不同 - 您需要将其类指定为类型的一部分。此外,在调用它们时,您需要指定一个调用成员函数的对象。

您的错误消息显示您传递的成员函数的类型实际上是double (CLASS::*)(double, double) - 这与签名中的普通函数指针类型不兼容

在这里查看C ++ FAQ以获取有关如何使用成员函数指针的更多信息:

http://www.parashift.com/c++-faq-lite/pointers-to-members.html

答案 1 :(得分:4)

>

有一个指向成员函数的指针,但是它在结构中基本上是一个偏移量,因此要使用它,你需要提供指向成员函数的指针, 要调用该成员函数的对象。鉴于你正在做什么,看起来你不太可能(至少对我来说)你真的想要这个。

我的立即反应是将您的Function1Function2写为模板,并传递函子而不是指向函数的指针。而不是指定普通的成员函数,每个都会像其他函子一样,并重载operator()来完成工作。

编辑:如果可以的话,我也会避免使用可变参数函数 - 它们会丢弃类型信息,这是C ++中明确的no-nos之一。特别是对于支持C ++ 11的新C ++编译器,它几乎总是很容易避免它(你可以传递一个创建对象的初始化列表)。

相关问题