diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index c3809c1..989545e 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -3591,6 +3591,198 @@ namespace ZNsMain ■ class ZtCObjtChain<> + 각 객체에 어떻게 쉽게 접근하는지가 관건이다. -- 2025-10-18 01:41 + + ///////////////////////////////////////////////////////////////////*/ + + template /*########################################################*/ + < + typename TTypeNow, typename TTypeNextChain + > + class ZtCObjtChain : public TTypeNextChain ////////////////////////// + { + public : + typedef TTypeNow TypeData ; + typedef ZtCObjtChain TypeChainNow ; + typedef TTypeNextChain TypeChainNext ; + /************************************************************/ + typedef const TypeChainNow TypeChainNowC ; + typedef const TypeChainNext TypeChainNextC; + /************************************************************/ + typedef const TypeData TypeDataC ; + /************************************************************/ + typedef typename TypeChainNext::TypeData TypeNext ; + /************************************************************/ + 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(){} + public : + TypeData & GetData() {return mo_TypeVar;} + TypeDataC& GetData() const{return mo_TypeVar;} + /************************************************************/ + TypeChainNext & GetChainNext() + { return static_cast(*this); } + TypeChainNextC& GetChainNext() const + { return static_cast(*this); } + /************************************************************/ + + 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, typename TTypeNextChain + > + class ZtCObjtChain : public TTypeNextChain ////////////////////////*/ + + + template /*########################################################*/ + < typename TTypeNow > + class ZtCObjtChain /////////////////////////////// + { + public : + typedef ZtCObjtChain ZCObjtChain; + public : + typedef TTypeNow TypeData ; + typedef ZCObjtChain TypeChainNow ; + typedef ZCObjtChain TypeChainNext ; + /************************************************************/ + typedef ZCEmpty TypeNext ; + /************************************************************/ + typedef const TypeData TypeDataC ; + /************************************************************/ + typedef const TypeChainNow TypeChainNowC ; + typedef const TypeChainNow TypeChainNextC; + /************************************************************/ + 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(){} + public : + TypeData & GetData() {return mo_TypeVar;} + TypeDataC& GetData() const{return mo_TypeVar;} + /************************************************************/ + TypeChainNext & GetChainNext() { return (*this); } + TypeChainNextC& GetChainNext() const{ return (*this); } + /************************************************************/ + + 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 > + class ZtCObjtChain /////////////////////////////*/ + + + + /*/////////////////////////////////////////////////////////////////// + + ■ class ZtCObjtChainEx<> + 자료형 TTypeNow 에 대하여, 기본값 TTypeVar 으로 자동 초기화하려는 목적으로 만들었으나, 기본 자료형 즉 int, long, char 에 대해서만 동 작하고 class 에서는 동작하지 않는다. 리눅스에서는 double 형에 대해 @@ -3602,11 +3794,11 @@ namespace ZNsMain < typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain > - class ZtCObjtChain : public TTypeNextChain ////////////////////////// + class ZtCObjtChainEx : public TTypeNextChain //////////////////////// { public : typedef TTypeNow TypeData ; - typedef ZtCObjtChain TypeChainNow ; + typedef ZtCObjtChainEx TypeChainNow ; typedef TTypeNextChain TypeChainNext ; /************************************************************/ typedef typename TypeChainNext::TypeData TypeNext ; @@ -3622,7 +3814,7 @@ namespace ZNsMain private: TypeData mo_TypeVar; public : - ZtCObjtChain() : mo_TypeVar(TTypeVar){} + ZtCObjtChainEx() : mo_TypeVar(TTypeVar){} public : TypeData & GetData() {return mo_TypeVar;} TypeDataC& GetData() const{return mo_TypeVar;} @@ -3689,24 +3881,23 @@ namespace ZNsMain template void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) */ - public: };/* template /*########################################################## < typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain > - class ZtCObjtChain : public TTypeNextChain ////////////////////////*/ + class ZtCObjtChainEx : public TTypeNextChain //////////////////////*/ template /*########################################################*/ < typename TTypeNow, TTypeNow TTypeVar > - class ZtCObjtChain ///////////////////// + class ZtCObjtChainEx /////////////////// { public : - typedef ZtCObjtChain ZCObjtChain; + typedef ZtCObjtChainEx ZCObjtChain; public : typedef TTypeNow TypeData ; typedef ZCObjtChain TypeChainNow ; @@ -3725,7 +3916,7 @@ namespace ZNsMain private: TypeData mo_TypeVar; public : - ZtCObjtChain() : mo_TypeVar(TTypeVar){} + ZtCObjtChainEx() : mo_TypeVar(TTypeVar){} public : TypeData & GetData() {return mo_TypeVar;} TypeDataC& GetData() const{return mo_TypeVar;} @@ -3763,15 +3954,13 @@ namespace ZNsMain template void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) */ - - public: };/* template /*########################################################## < typename TTypeNow, TTypeNow TTypeVar > - class ZtCObjtChain ///////////////////*/ + class ZtCObjtChainEx /////////////////*/ diff --git a/ZCppMainTest/c++_test_006.cpp b/ZCppMainTest/c++_test_006.cpp index 3cbe10f..feedc9f 100644 --- a/ZCppMainTest/c++_test_006.cpp +++ b/ZCppMainTest/c++_test_006.cpp @@ -108,17 +108,17 @@ namespace ZNsMain cout< > - > ZtCObjtChain; ZCTypeView VO_ZCTypeView; + > ZtCObjtChainEx; ZCTypeView VO_ZCTypeView; - ZtCObjtChain VO_ZtCObjtChain; int VI_CallNo = 0; + ZtCObjtChainEx VO_ZtCObjtChain; int VI_CallNo = 0; cout<<"# VO_ZtCObjtChain.size()="<(VO_ZCTypeView); - cout<<"************************************"<::IterHead(VO_ZCTypeView); - cout<<"************************************"<::IterTail(VO_ZCTypeView); + cout<<"@*** call close : ZCTypeView(rhs) *********@"< ( VO_ZCTypeView, (VI_CallNo = 0) ); @@ -159,10 +160,10 @@ namespace ZNsMain ( VO_ZCTypeView, (VI_CallNo = 0) ); cout<<"************************************"<:: + ZCTypeChain::ZtCIterChain:: IterHead(VO_ZCTypeView, ZftMCP(VI_CallNo=0)); cout<<"************************************"<:: + ZCTypeChain::ZtCIterChain:: IterTail(VO_ZCTypeView, ZftMCP(VI_CallNo=0));