100分 诚征解答 问题复杂 诚请高手答复
问题见后:
1) THREAD_LOCAL(_AFX_THREAD_STATE, _afxThreadState)
#define THREAD_LOCAL(class_name, ident_name) \
AFX_DATADEF CThreadLocal<class_name> ident_name;
2)
template<class TYPE>
class CThreadLocal : public CThreadLocalObject
{
// Attributes
public:
AFX_INLINE TYPE* GetData()
{
TYPE* pData = (TYPE*)CThreadLocalObject::GetData(&CreateObject);
ASSERT(pData != NULL);
return pData;
}
AFX_INLINE TYPE* GetDataNA()
{
TYPE* pData = (TYPE*)CThreadLocalObject::GetDataNA();
return pData;
}
AFX_INLINE operator TYPE*()
{ return GetData(); }
AFX_INLINE TYPE* operator->()
{ return GetData(); }
// Implementation
public:
static CNoTrackObject* AFXAPI CreateObject()
{ return new TYPE; }
};
问题:
_AFX_THREAD_STATE* pState = _afxThreadState;
此语句中,_afxThreadState的类型是CThreadLocal<_AFX_THREAD_STATE>, pState的类型是_AFX_THREAD_STATE*,将_afxThreadState赋值给pState。不同类型之间赋值显然会出现编译错误,但是MFC就是这么做的。
在这赋值语句中,_afxThreadState会调用到CThreadLocal<_AFX_THREAD_STATE>的operator->()得到_AFX_THREAD_STATE类型数据返回给给pState。但是_afxThreadState并没有显示调用operator->()。
现在想不明白_afxThreadState怎么会调用到perator->呢?请高手指点。
100分送上