我需要为回调函数编写代码(它将在 ATL 中调用,但这并不重要):
HRESULT callback( void* myObjectVoid )
{
if( myObjectVoid == 0 ) {
return E_POINTER;
}
CMyClass* myObject = static_cast<CMyClass*>( myObjectVoid );
return myObject->CallMethod();
}
这里void*
保证是指向的指针CMyClass
,所以static_cast
是合法的。我担心的是代码必须尽可能可移植(至少到较新版本的 Visual C++)。因此,为了超级偏执,我也倾向于检查CMyClass*
指针 - 我的意思是如果它结果为空怎么办?
if( myObjectVoid == 0 ) {
return E_POINTER;
}
CMyClass* myObject = static_cast<CMyClass*>( myObjectVoid );
if( myObject == 0 ) {
return E_POINTER;
}
第二次检查是否合理?是否可以static_cast
将非空指针转换为空指针?