C++ C++;:将静态类成员与静态类成员的传递版本进行比较
我有几个相同类的非常相似的函数,它们可以互换地传递给一个函数。对于一个函数,它使用稍微不同的参数运行,因此我必须检查传递了哪个函数。目前我使用的是if语句,但是得到了错误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
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)
有解决办法吗?指针不只是内存中的一个位置吗?这两个函数在内存中的长度不一样吗?