c – 为什么将成员函数指针与NULL进行比较会产生警告?
发布时间:2020-12-16 03:46:25 所属栏目:百科 来源:网络整理
导读:对于 Windows,Mac和iOS,以下代码编译时没有警告: class MyClass { SomeOtherClass * m_object; void (SomeOtherClass::*m_callback)();public: MyClass(SomeOtherClass * _object,void (SomeOtherClass::*_callback)()=NULL) : m_object(_object),m_callbac
对于
Windows,Mac和iOS,以下代码编译时没有警告:
class MyClass { SomeOtherClass * m_object; void (SomeOtherClass::*m_callback)(); public: MyClass(SomeOtherClass * _object,void (SomeOtherClass::*_callback)()=NULL) : m_object(_object),m_callback(_callback) {} void DoStuff() { //generates warning: NULL used in arithmetic when compiling with the Android NDK if (NULL==m_callback) { m_object->DoNormalCallback(); } else { (m_object->*m_callback)(); } } }; 为什么会产生警告,我该怎么办呢? 解决方法
我不认为你可以将0(或NULL)与成员函数指针进行比较,特别是因为它们可能实际上不是指针(例如,当函数是虚函数时).
就个人而言,我会在没有比较的情况下重写if测试,例如: void DoStuff() { if (m_callback) { (m_object->*m_callback)(); } else { m_object->DoNormalCallback(); } } 并且,对于奖励积分,在构造函数中执行此测试. class MyClass { SomeOtherClass * m_object; void (SomeOtherClass::*m_callback)(); public: MyClass(SomeOtherClass * _object,m_callback(_callback) { // Use "DoNormalCallback" unless some other method is requested. if (!m_callback) { m_callback = &SomeOtherClass::DoNormalCallback; } } void DoStuff() { (m_object->*m_callback)(); } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |