C++:将静态类成员与静态类成员的传递版本进行比较
C++: Comparing static class member to a passed version of the static class member
我在同一类中有几个非常相似的函数,它们可以互换地传递给一个函数。对于一个函数,它使用稍微不同的参数运行,所以我必须检查传递了哪个函数。目前我正在使用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);
对于每个功能。仅适用于Meth,(不是Trap等)我收到错误消息
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);
static_cast给我错误:static_cast 无效
错误告诉您正在将指向全局函数的指针与指向类方法的指针进行比较。它们是不同的类型。
编辑:指向类静态方法的指针与指向全局函数的指针具有相同的类型。因此Trap
的类型是double (*)(double (*)(double), int, double, double, bool)
而不是double (Integrators::*)(double (*)(double), int, double, double, bool)
相关文章:
- 使用静态成员声明类时遇到问题
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 从相同类型的静态成员进行类内初始化
- 是否通过单元化指针UB访问静态类成员
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 从静态成员函数访问私有非静态类变量 - C++
- 在子类中填充静态类成员
- 作为成员的静态类模板实例会导致未解析的外部符号错误
- uninit_member:非静态类成员字段 m_cJobState.bstatus 未在此构造函数中初始化,也不在其调
- uninit_member:非静态类成员m_wszParams未在此构造函数中初始化,也不在它C++中调用的任何函数中初
- 说明通过指针访问非静态类成员函数
- 静态类数据成员的线程安全
- 具有静态成员的类的前向声明
- 枚举不是非静态数据成员或类的基类
- 静态类成员的使用
- 静态类成员不是与 this 指针没有关联吗?
- 使用静态类成员而不是私有字段之间的速度差异是什么?
- 如何在 Visual Studio 中显示模板的静态类成员
- 即使没有析构函数,非静态类成员也会被销毁吗?
- 静态模板函数访问静态类成员