From 31a6d46726d448919c22b500592f80380060eb34 Mon Sep 17 00:00:00 2001 From: sauron Date: Sat, 18 Oct 2025 00:09:09 +0900 Subject: [PATCH] commit 2025-10-18 00:09 add ZtCObjtChain in ZCppMain/ZMainHead.H --- ZCppMain/ZMainHead.H | 186 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index 3d84478..0099ce4 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -3264,6 +3264,15 @@ namespace ZNsMain static ZTypIntE size(){return ZETypeNo;} public: + /*////////////////////////////////////////////// + + ■ static 함수는 template 이 될 수 없으므로, + 내포 class template 으로 해결한다. + + -- 2025-10-17 22:09 + + //////////////////////////////////////////////*/ + template class ZtCIterChain { public: @@ -3578,6 +3587,183 @@ namespace ZNsMain + template /*########################################################*/ + < + typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain + > + class ZtCObjtChain : public TTypeNextChain ////////////////////////// + { + public : + typedef TTypeNow TypeData ; + typedef ZtCObjtChain TypeChainNow ; + typedef TTypeNextChain TypeChainNext ; + /************************************************************/ + typedef typename TypeChainNext::TypeData TypeNext ; + /************************************************************/ + typedef const TypeData TypeDataC ; + /************************************************************/ + enum{ZETypeNo = TypeChainNext::ZETypeNo+1}; + enum{ZEBoolNext = 1 }; + public : + static ZTypIntE Size (){return ZETypeNo;} + static ZTypIntE size (){return ZETypeNo;} + static ZTypIntE GetNo(){return ZETypeNo;} + private: + TypeData mo_TypeVar; + public : + ZtCObjtChain() : mo_TypeVar(TTypeVar){} + public : + TypeData & GetData() {return mo_TypeVar;} + TypeDataC& GetData() const{return mo_TypeVar;} + public : + + template void IterHead(TViewChain AO_CView) + { + ZtCTypeData:: + GetObjRef(AO_CView).OnMeetData(*this); + + if(TypeChainNow::ZEBoolNext>0) + { + static_cast(*this).IterHead(AO_CView); + }/* + if(TypeChainNow::ZEBoolNext>0)*/ + }/* + template void IterHead(TViewChain AO_CView)*/ + template void IterTail(TViewChain AO_CView) + { + if(TypeChainNow::ZEBoolNext>0) + { + static_cast(*this).IterTail(AO_CView); + }/* + if(TypeChainNow::ZEBoolNext>0)*/ + + ZtCTypeData:: + GetObjRef(AO_CView).OnMeetData(*this); + }/* + template void IterTail(TViewChain AO_CView)*/ + + + template + void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp) + { + typedef ZNsMain::ZtCCheckRef ZCCheckRef; + + ZtCTypeData::GetObjRef(AO_CView). + OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp)); + + if(TypeChainNow::ZEBoolNext>0) + { + static_cast(*this). + IterHead( AO_CView, AO_TypeHelp ) ; + }/* + if(TypeChainNow::ZEBoolNext>0)*/ + }/* + template + void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/ + template + void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) + { + if(TypeChainNow::ZEBoolNext>0) + { + static_cast(*this). + IterTail( AO_CView, AO_TypeHelp ) ; + }/* + if(TypeChainNow::ZEBoolNext>0)*/ + + typedef ZNsMain::ZtCCheckRef ZCCheckRef; + + ZtCTypeData::GetObjRef(AO_CView). + OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp)); + }/* + template + void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) + */ + + public: + };/* + template /*########################################################## + < + typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain + > + class ZtCObjtChain : public TTypeNextChain ////////////////////////*/ + + + template /*########################################################*/ + < + typename TTypeNow, TTypeNow TTypeVar + > + class ZtCObjtChain ///////////////////// + { + public : + typedef ZtCObjtChain ZCObjtChain; + public : + typedef TTypeNow TypeData ; + typedef ZCObjtChain TypeChainNow ; + typedef ZCObjtChain TypeChainNext ; + /************************************************************/ + typedef ZCEmpty TypeNext ; + /************************************************************/ + typedef const TypeData TypeDataC ; + /************************************************************/ + enum{ZETypeNo = 1 }; + enum{ZEBoolNext = 0 }; + public : + static ZTypIntE Size (){return ZETypeNo;} + static ZTypIntE size (){return ZETypeNo;} + static ZTypIntE GetNo(){return ZETypeNo;} + private: + TypeData mo_TypeVar; + public : + ZtCObjtChain() : mo_TypeVar(TTypeVar){} + public : + TypeData & GetData() {return mo_TypeVar;} + TypeDataC& GetData() const{return mo_TypeVar;} + public : + + template void IterHead(TViewChain AO_CView) + { + ZtCTypeData:: + GetObjRef(AO_CView).OnMeetData(*this); + }/* + template void IterHead(TViewChain AO_CView)*/ + template void IterTail(TViewChain AO_CView) + { + ZtCTypeData:: + GetObjRef(AO_CView).OnMeetData(*this); + }/* + template void IterTail(TViewChain AO_CView)*/ + + template + void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp) + { + typedef ZNsMain::ZtCCheckRef ZCCheckRef; + + ZtCTypeData::GetObjRef(AO_CView). + OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp)); + } + template + void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) + { + typedef ZNsMain::ZtCCheckRef ZCCheckRef; + + ZtCTypeData::GetObjRef(AO_CView). + OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp)); + }/* + template + void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) + */ + + + public: + };/* + template /*########################################################## + < + typename TTypeNow, TTypeNow TTypeVar + > + class ZtCObjtChain ///////////////////*/ + + + namespace ZNsTmplChain {