python operator,operator* operator- 操作符的使用

 2023-10-07 阅读 27 评论 0

摘要:從學習使用C、C++以來,對于操作符的重載的問題一直就是不理解,究其根源編譯器是怎么處理這些事情的呢?下面重現以下場 // // class CNoTrackObject { };class CThreadLocalObject { public:CNoTrackObject* GetData(CNoTrackObject* (*pfnCreate

從學習使用C、C++以來,對于操作符的重載的問題一直就是不理解,究其根源編譯器是怎么處理這些事情的呢?下面重現以下場

//
//
class CNoTrackObject
{
};class CThreadLocalObject
{
public:CNoTrackObject* GetData(CNoTrackObject* (*pfnCreateObject)()){CNoTrackObject* pValue = (*pfnCreateObject)();		return pValue;}~CThreadLocalObject(){}
};template<class TYPE>
class CThreadLocal : public CThreadLocalObject
{
public:TYPE* GetData(){TYPE* pData = (TYPE*)CThreadLocalObject::GetData(&CreateObject);return pData;}operator TYPE*(){return GetData();}TYPE* operator->(){return GetData();}
public:static CNoTrackObject* CreateObject(){ return new TYPE;}
};#define THREAD_LOCAL(class_name, ident_name) CThreadLocal<class_name> ident_name;//
// // // // // // //  上面的代碼是框架,下面的代碼是使用  // // // // // // // // // // // // // // // // // // 
//struct CMyThreadData : public CNoTrackObject
{int nSomeData;
};
THREAD_LOCAL(CMyThreadData, g_myThreadData)void main()
{CMyThreadData *p=g_myThreadData;
}

python operator,

只需要給以下代碼加上斷點,進行調試即可,通過堆棧查看其調用過程即可
static CNoTrackObject* CreateObject()



后來發現上面的代碼有點冗余,下面貼上一個簡單、精煉點兒的

operator變形。

class Base
{
public:Base* GetData(Base* (*pfnCreateObject)()){Base* pData = (*pfnCreateObject)();return pData;}operator Base*(){return GetData(&CreateObject);}Base* operator->(){return GetData(&CreateObject);}
public:static Base* CreateObject(){ return new Base;}
};Base g_Base;void main()
{Base *q=g_Base;
}




版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/126846.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息