From 4113a0a6f1af6555b35379323d2e9c394ea78727 Mon Sep 17 00:00:00 2001 From: sauron Date: Sat, 18 Oct 2025 10:13:33 +0900 Subject: [PATCH] commit 2025-10-18 10:13 ZtCObjtChainEx => ZtCMiniValChain : ZCppMain/ZMainHead.H --- ZCppMain/ZMainHead.H | 253 ++++++++++++++++++++++-------------------- ZCppMainTest/c++_test_006.cpp | 33 +++--- 2 files changed, 155 insertions(+), 131 deletions(-) diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index 1bee22d..41ec514 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -3561,9 +3561,11 @@ namespace ZNsMain ZftIterTypeChainTail(VO_ZCTypeView); cout<<"************************************"<::IterHead(VO_ZCTypeView); + //ZCTypeChain::ZtCIterChain::IterHead(VO_ZCTypeView); + ZCTypeChain::ZtCIterChain::IterHead(VO_ZCTypeView); cout<<"************************************"<::IterTail(VO_ZCTypeView); + //ZCTypeChain::ZtCIterChain::IterTail(VO_ZCTypeView); + ZCTypeChain::ZtCIterChain::IterTail(VO_ZCTypeView); ZftIterTypeChainHead ( VO_ZCTypeView, (VI_CallNo = 0) ); @@ -3696,7 +3698,7 @@ namespace ZNsMain */ public: };/* - template /*########################################################## + template ############################################################ < typename TTypeNow, typename TTypeNextChain > @@ -3773,7 +3775,7 @@ namespace ZNsMain */ public: };/* - template /*########################################################## + template ############################################################ < typename TTypeNow > class ZtCObjtChain /////////////////////////////*/ @@ -3781,27 +3783,27 @@ namespace ZNsMain /*/////////////////////////////////////////////////////////////////// - ■ class ZtCObjtChainEx<> + ■ class ZtCMiniValChain<> 자료형 TTypeNow 에 대하여, 기본값 TTypeVar 으로 자동 초기화하려는 목적으로 만들었으나, 기본 자료형 즉 int, long, char 에 대해서만 동 작하고 class 에서는 동작하지 않는다. 리눅스에서는 double 형에 대해 서도 동작하지 않는다. -- 2025-10-18 00:17 - ■ class ZtCObjtChainEx<> 사용 예. + ■ class ZtCMiniValChain<> 사용 예. - typedef ZtCObjtChainEx + typedef ZtCMiniValChain < - char , 'a' , ZtCObjtChainEx< - long , 1567 , ZtCObjtChainEx< - char , 'a' , ZtCObjtChainEx< - char , 'a' , ZtCObjtChainEx< - char , 'c' , ZtCObjtChainEx< - char , 'd' , ZtCObjtChainEx< - char , 'f' , ZtCObjtChainEx< + char , 'a' , ZtCMiniValChain< + long , 1567 , ZtCMiniValChain< + char , 'a' , ZtCMiniValChain< + char , 'a' , ZtCMiniValChain< + char , 'c' , ZtCMiniValChain< + char , 'd' , ZtCMiniValChain< + char , 'f' , ZtCMiniValChain< int , 19 , ZCEmpty > > > > > > > - > ZtCObjtChainEx ; + > ZtCMiniValChain ; 잘하면 char 형의 조합으로, 문자열 비슷하게 사용할 수도 있겠다. @@ -3813,11 +3815,11 @@ namespace ZNsMain < typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain > - class ZtCObjtChainEx : public TTypeNextChain //////////////////////// + class ZtCMiniValChain /////////////////////////////////////////////// { public : typedef TTypeNow TypeData ; - typedef ZtCObjtChainEx TypeChainNow ; + typedef ZtCMiniValChain TypeChainNow ; typedef TTypeNextChain TypeChainNext ; /************************************************************/ typedef typename TypeChainNext::TypeData TypeNext ; @@ -3827,96 +3829,102 @@ namespace ZNsMain 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 : - ZtCObjtChainEx() : mo_TypeVar(TTypeVar){} - public : - TypeData & GetData() {return mo_TypeVar;} - TypeDataC& GetData() const{return mo_TypeVar;} + static ZTypIntE Size (){return ZETypeNo;} + static ZTypIntE size (){return ZETypeNo;} + static ZTypIntE GetNo (){return ZETypeNo;} + static TypeData GetData(){return TTypeVar;} public : - template void IterHead(TViewChain AO_CView) + template class ZtCIterChain { - ZtCTypeData:: - GetObjRef(AO_CView).OnMeetData(*this); + public: - if(TypeChainNow::ZEBoolNext>0) + static void IterHead(TViewChain AO_CView) { - static_cast(*this).IterHead(AO_CView); + AO_CView.template OnMeetTypeVal(); + + if(TypeChainNow::ZEBoolNext>0) + { + TypeChainNext::template + ZtCIterChain::IterHead(AO_CView); + }/* + if(TypeChainNow::ZEBoolNext>0)*/ }/* - if(TypeChainNow::ZEBoolNext>0)*/ - }/* - template void IterHead(TViewChain AO_CView)*/ - template void IterTail(TViewChain AO_CView) - { - if(TypeChainNow::ZEBoolNext>0) + static void IterHead(TViewChain AO_CView)*/ + static void IterTail(TViewChain AO_CView) { - static_cast(*this).IterTail(AO_CView); + if(TypeChainNow::ZEBoolNext>0) + { + TypeChainNext::template + ZtCIterChain::IterTail(AO_CView); + }/* + if(TypeChainNow::ZEBoolNext>0)*/ + + AO_CView.template OnMeetTypeVal(); }/* - if(TypeChainNow::ZEBoolNext>0)*/ + static 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)); - - if(TypeChainNow::ZEBoolNext>0) + template static void + IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp) { - static_cast(*this). - IterHead( AO_CView, AO_TypeHelp ) ; + typedef ZNsMain::ZtCCheckRef ZCCheckRef; + typedef typename ZCCheckRef::TypeRaw TypeRaw ; + + AO_CView.template OnMeetTypeVal + ( ZCCheckRef::PassData(AO_TypeHelp) ) ; + /****************************************************/ + + if(TypeChainNow::ZEBoolNext>0) + { + TypeChainNext::template ZtCIterChain:: + template IterHead(AO_CView, AO_TypeHelp) ; + }/* + if(TypeChainNow::ZEBoolNext>0)*/ }/* - 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) + template static void + IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/ + + template static void + IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) { - static_cast(*this). - IterTail( AO_CView, AO_TypeHelp ) ; + typedef ZNsMain::ZtCCheckRef ZCCheckRef; + typedef typename ZCCheckRef::TypeRaw TypeRaw ; + + if(TypeChainNow::ZEBoolNext>0) + { + TypeChainNext::template ZtCIterChain:: + template IterTail(AO_CView, AO_TypeHelp) ; + } + AO_CView.template OnMeetTypeVal + ( ZCCheckRef::PassData(AO_TypeHelp) ) ; + /****************************************************/ }/* - if(TypeChainNow::ZEBoolNext>0)*/ + template static void + IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/ - typedef ZNsMain::ZtCCheckRef ZCCheckRef; + public: + };/* + template class ZtCIterChain*/ - ZtCTypeData::GetObjRef(AO_CView). - OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp)); - }/* - template - void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) - */ public: };/* - template /*########################################################## + template ############################################################ < typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain > - class ZtCObjtChainEx : public TTypeNextChain //////////////////////*/ + class ZtCMiniValChain : public TTypeNextChain /////////////////////*/ template /*########################################################*/ < typename TTypeNow, TTypeNow TTypeVar > - class ZtCObjtChainEx /////////////////// + class ZtCMiniValChain ////////////////// { public : - typedef ZtCObjtChainEx ZCObjtChain; + typedef ZtCMiniValChain ZCObjtChain; public : typedef TTypeNow TypeData ; typedef ZCObjtChain TypeChainNow ; @@ -3929,57 +3937,66 @@ namespace ZNsMain 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 : - ZtCObjtChainEx() : mo_TypeVar(TTypeVar){} - public : - TypeData & GetData() {return mo_TypeVar;} - TypeDataC& GetData() const{return mo_TypeVar;} + static ZTypIntE Size (){return ZETypeNo;} + static ZTypIntE size (){return ZETypeNo;} + static ZTypIntE GetNo (){return ZETypeNo;} + static TypeData GetData(){return TTypeVar;} public : - template void IterHead(TViewChain AO_CView) + template class ZtCIterChain { - 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)*/ + public: - template - void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp) - { - typedef ZNsMain::ZtCCheckRef ZCCheckRef; + static void IterHead(TViewChain AO_CView) + { + AO_CView.template OnMeetTypeVal(); + }/* + static void IterHead(TViewChain AO_CView)*/ + static void IterTail(TViewChain AO_CView) + { + AO_CView.template OnMeetTypeVal(); + }/* + static void IterTail(TViewChain AO_CView)*/ - ZtCTypeData::GetObjRef(AO_CView). - OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp)); - } - template - void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) - { - typedef ZNsMain::ZtCCheckRef ZCCheckRef; + /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ + + template static void + IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp) + { + typedef ZNsMain::ZtCCheckRef ZCCheckRef; + typedef typename ZCCheckRef::TypeRaw TypeRaw ; + + AO_CView.template OnMeetTypeVal + ( ZCCheckRef::PassData(AO_TypeHelp) ) ; + /****************************************************/ + }/* + template static void + IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/ + + template static void + IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) + { + typedef ZNsMain::ZtCCheckRef ZCCheckRef; + typedef typename ZCCheckRef::TypeRaw TypeRaw ; + + AO_CView.template OnMeetTypeVal + ( ZCCheckRef::PassData(AO_TypeHelp) ) ; + /****************************************************/ + }/* + template static void + IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/ + + public: + };/* + template class ZtCIterChain*/ - ZtCTypeData::GetObjRef(AO_CView). - OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp)); - }/* - template - void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) - */ public: };/* - template /*########################################################## + template ############################################################ < typename TTypeNow, TTypeNow TTypeVar > - class ZtCObjtChainEx /////////////////*/ + class ZtCMiniValChain ////////////////*/ diff --git a/ZCppMainTest/c++_test_006.cpp b/ZCppMainTest/c++_test_006.cpp index feedc9f..9ebfeb5 100644 --- a/ZCppMainTest/c++_test_006.cpp +++ b/ZCppMainTest/c++_test_006.cpp @@ -70,6 +70,15 @@ namespace ZNsMain cout<<"* Call No="<<++AR_CallNo<<" : "< void OnMeetTypeVal() + { + cout<<"* Val="< void OnMeetTypeVal(TTypHelp& AR_CallNo) + { + cout<<"* Call No="<<++AR_CallNo<<" : Val="< void OnMeetData(TObjtChain& AR_NowChain) { cout<<"* Type No="< > - > ZtCObjtChainEx; ZCTypeView VO_ZCTypeView; + > ZCMiniValChain; ZCTypeView VO_ZCTypeView; int VI_CallNo = 0; - ZtCObjtChainEx VO_ZtCObjtChain; int VI_CallNo = 0; + cout<<"# ZCMiniValChain.size()="<::IterTail(VO_ZCTypeView); cout<<"************************************"<::IterHead(VO_ZCTypeView, ZftMCP(VI_CallNo = 0)); cout<<"************************************"<::IterTail(VO_ZCTypeView, ZftMCP(VI_CallNo = 0)); cout<<"************************************"<