对于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)();
}
}
};
Run Code Online (Sandbox Code Playgroud)
为什么会产生警告,我该怎么办呢?
我认为您不允许与成员函数指针进行比较0(或NULL),特别是因为它们可能实际上不是指针(virtual例如,当函数是 时)。
就我个人而言,我会重写if测试而不进行比较,例如:
void DoStuff() {
if (m_callback) {
(m_object->*m_callback)();
} else {
m_object->DoNormalCallback();
}
}
Run Code Online (Sandbox Code Playgroud)
并且,为了获得奖励积分,请在构造函数中执行此测试。
class MyClass {
SomeOtherClass * m_object;
void (SomeOtherClass::*m_callback)();
public:
MyClass(SomeOtherClass * _object,void (SomeOtherClass::*_callback)()=NULL) :
m_object(_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)();
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3666 次 |
| 最近记录: |