C++ C++;:将静态类成员与静态类成员的传递版本进行比较

C++ C++;:将静态类成员与静态类成员的传递版本进行比较,c++,class,static,C++,Class,Static,我有几个相同类的非常相似的函数,它们可以互换地传递给一个函数。对于一个函数,它使用稍微不同的参数运行,因此我必须检查传递了哪个函数。目前我使用的是if语句,但是得到了错误 error: invalid operands of types ‘double (Integrators::*)(double (*)(double), int, double, double, bool)’ and ‘double (*)(double (*)(double), int, do

我有几个相同类的非常相似的函数,它们可以互换地传递给一个函数。对于一个函数,它使用稍微不同的参数运行,因此我必须检查传递了哪个函数。目前我使用的是if语句,但是得到了错误

 error: invalid operands of types ‘double (Integrators::*)(double (*)(double),
      int, double, double, bool)’ and ‘double (*)(double (*)(double), int, 
       double, double, bool)’ to binary ‘operator==’
            if(Meth==&Integrators::Trap || Meth==&Integrators::Simp ||
这是类声明和我的代码的开始:

class Integrators{
public:
    static double Trap(double(*f)(double),int N, double a, double b, 
        bool closed=true);
    static double Simp(double(*f)(double),int N, double a, double b, 
        bool closed=true);
    static double Midp(double(*f)(double),int N, double a, double b,
        bool closed=true);
    static double SInf(double(*f)(double),int N, double a, double b, 
        bool closed=true);
    double ToEps(double (Integrators::*Meth)(double
                    (double),int,double,double,bool), 
        double (*f)(double), double a, double b, 
                    double eps, int Jmax=100, int Jmin=3, 
                    bool closed=true);
};

double Integrators::ToEps(double (Integrators::*Meth)(double (double),int,double,
    double,bool), 
            double (*f)(double), double a, double b, double eps,
            int Jmax, int Jmin, bool closed)
{

    double fac;
    if(Meth==&Integrators::Trap || Meth==&Integrators::Simp ||
        Meth==&Integrators::SInf)
    fac=2.;
    else if(Meth==&Integrators::Midp)
    fac=3.;

更新::

我试着用

void * Pmeth=reinterpret_cast<void*>(Meth);
void*Pmeth=重新解释铸件(方法);
对于每个函数。仅针对冰毒(不是陷阱等),我收到了错误消息

Integrators.cpp:216:43: warning: converting from ‘double (Integrators::*)
(double (*)  (double), int, double, double, bool)’ to ‘void*’ 
[-Wpmf-conversions]  void * Pmeth=reinterpret_cast<void*>(Meth);
Integrators.cpp:216:43:警告:从'double'转换(Integrators::*)
(double(*)(double)、int、double、double、bool)到“void*”
[-Wpmf转换]void*Pmeth=重新解释铸造(Meth);

static_cast给了我一个错误:无效的static_cast

错误表明您正在比较指向全局函数的指针和指向类方法的指针。它们是不同的类型


编辑:指向类静态方法的指针与指向全局函数的指针具有相同的类型。所以
陷阱的类型是
double(*)(double(*)(double),int,double,double,bool)
而不是
double(积分器::*)(double(*)(double),int,double,double,bool)

有解决办法吗?指针不只是内存中的一个位置吗?这两个函数在内存中的长度不一样吗?