看了一篇关于mfc状态的文章,深受启发,但文章最后说到
"另外,CThreadLocal模板重载了操作符号“*”、“->”,这样编译器将自动地进行有关类型转换,例如: _AFX_THREAD_STATE *pStata = _afxThreadState 是可以被编译器接收的。" "*"号的重载用于类型转换好理解,但“-〉”用于类型转换却百思不得其解!!! 小弟看了看mfc的用法,在“use mfc in a static library”模式下用的是“*”重载, 在“use mfc in a shared dll”模式下用的却是“-〉”转换, 前者好理解,后者怎么会用到,难道_afxThreadState是指针?? 还望不吝赐教!!问题补充: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; }
}; CThreadLocal<CThreadLocal> _afxThreadState
"另外,CThreadLocal模板重载了操作符号“*”、“->”,这样编译器将自动地进行有关类型转换,例如: _AFX_THREAD_STATE *pStata = _afxThreadState 是可以被编译器接收的。" "*"号的重载用于类型转换好理解,但“-〉”用于类型转换却百思不得其解!!! 小弟看了看mfc的用法,在“use mfc in a static library”模式下用的是“*”重载, 在“use mfc in a shared dll”模式下用的却是“-〉”转换, 前者好理解,后者怎么会用到,难道_afxThreadState是指针?? 还望不吝赐教!!问题补充: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; }
}; CThreadLocal<CThreadLocal> _afxThreadState
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货