diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index cb7266b..e48a57e 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -3261,6 +3261,89 @@ namespace ZNsMain + /*################################################################### + + ■ template class ZtCTypeByNo + + ZtCTypeChain, ZtCObjtChain 등을 template 인자로 받아, 어떤 index + 숫자로부터 type 을 알 수 있게 한다. index 는 0 부터 시작한다. + + 이러면 ZtCObjtChain 의 활용성이 점점 높어지는 것이다. -- 2025-10-23 19:47 + + ■ 예제 -- 2025-10-23 19:55 + + typedef ZtCObjtChain + < + char , ZtCObjtChain< + string, ZtCObjtChain< + double, ZtCObjtChain< + int , + ZCEmpty > > > + > ZCObjtChain; ZCObjtChain VO_ZCObjtChain; + + VO_ZCObjtChain.GetChainNext().GetData()="abc"; + *VO_ZCObjtChain ='Z' ; + *VO_ZCObjtChain() ="New Str"; + *VO_ZCObjtChain()() =0.8 ; + *VO_ZCObjtChain()()() =1234 ; + VO_ZCObjtChain.IterHead(VO_ZCTypeView); + + typedef ZtCTypeByNo::TypeData TypeDataHere0 ; + typedef ZtCTypeByNo::TypeData TypeDataHere1 ; + typedef ZtCTypeByNo::TypeData TypeDataHere2 ; + typedef ZtCTypeByNo::TypeData TypeDataHere3 ; + typedef ZtCTypeByNo::TypeData TypeDataHere4 ; + + typedef ZtCTypeByNo::TypeChain TypeChainHere0; + typedef ZtCTypeByNo::TypeChain TypeChainHere1; + typedef ZtCTypeByNo::TypeChain TypeChainHere2; + typedef ZtCTypeByNo::TypeChain TypeChainHere3; + typedef ZtCTypeByNo::TypeChain TypeChainHere4; + + cout<<"# TypeDataHere0 ="<()=(1.8); + *VO_ZCObjtChain.GetChainByNo<3>()=(9999); + VO_ZCObjtChain.IterHead(ZftMCP(VO_ZCTypeView)); + cout<<"************************************"<::TypeChainLast 을 추가해, 마지막 TypeChainNext 즉 마지막 TypeChainNow @@ -3734,6 +3837,13 @@ namespace ZNsMain VO_ZCObjtChain.IterHead(ZftMCP(VO_ZCTypeView)); cout<<"************************************"<()=('E'); + *VO_ZCObjtChain.GetChainByNo<1>()=(string("New4 Str")); + *VO_ZCObjtChain.GetChainByNo<2>()=(1.8); + *VO_ZCObjtChain.GetChainByNo<3>()=(9999); + VO_ZCObjtChain.IterHead(ZftMCP(VO_ZCTypeView)); + cout<<"************************************"<(*this); } + { return static_cast(*this); } TypeChainNextC& GetChainNext() const - { return static_cast(*this); } + { return static_cast(*this); } TypeChainNext & operator() () - { return static_cast(*this); } + { return static_cast(*this); } TypeChainNextC& operator() () const - { return static_cast(*this); } + { return static_cast(*this); } template TypeChainNow & operator= (const TDataHere& AR_Data) @@ -3787,7 +3897,25 @@ namespace ZNsMain TypeChainNow & operator= (const TypeData & AR_Data) { mo_TypeVar=AR_Data; return *this;} - /************************************************************/ + /**************************************************************/ + + template typename ZtCTypeByNo + ::TypeChain & GetChainByNo() + { + typedef typename ZtCTypeByNo + ::TypeChain TypeChain ; + + return *static_cast(this); + } + template typename ZtCTypeByNo + ::TypeChainC& GetChainByNo() const + { + typedef typename ZtCTypeByNo + ::TypeChainC TypeChainC; + + return *static_cast(this); + } + /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ template bool SetDataRecur(const TDataHere& AR_Data) @@ -3937,6 +4065,20 @@ namespace ZNsMain { mo_TypeVar=AR_Data; return *this;} /************************************************************/ + template typename ZtCTypeByNo + ::TypeChain & GetChainByNo() + { + return *(this); + } + template typename ZtCTypeByNo + ::TypeChainC& GetChainByNo() const + { + return *(this); + }/* + template typename ZtCTypeByNo + ::TypeChainC& GetChainByNo() const + */ + template bool SetDataRecur(const TDataHere& AR_Data) { @@ -3993,83 +4135,27 @@ namespace ZNsMain class ZtCObjtChain /////////////////////////////*/ - - /*################################################################### - - ■ template class ZtCTypeByNo - - ZtCTypeChain, ZtCObjtChain 등을 template 인자로 받아, 어떤 index - 숫자로부터 type 을 알 수 있게 한다. index 는 0 부터 시작한다. - - 이러면 ZtCObjtChain 의 활용성이 점점 높어지는 것이다. -- 2025-10-23 19:47 - - ■ 예제 -- 2025-10-23 19:55 + template std::ostream& operator<< + ( + std::ostream& AR_COStream, const ZtCObjtChain + & AR_CChain + ) + /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ + { + AR_COStream< > > - > ZCObjtChain; ZCObjtChain VO_ZCObjtChain; + TypeObjtChain; - VO_ZCObjtChain.GetChainNext().GetData()="abc"; - *VO_ZCObjtChain ='Z' ; - *VO_ZCObjtChain() ="New Str"; - *VO_ZCObjtChain()() =0.8 ; - *VO_ZCObjtChain()()() =1234 ; - VO_ZCObjtChain.IterHead(VO_ZCTypeView); + if(TypeObjtChain::ZEBoolNext>0) + { + cout<<", "; return AR_COStream<0)*/ - typedef ZtCTypeByNo::TypeData TypeDataHere0 ; - typedef ZtCTypeByNo::TypeData TypeDataHere1 ; - typedef ZtCTypeByNo::TypeData TypeDataHere2 ; - typedef ZtCTypeByNo::TypeData TypeDataHere3 ; - typedef ZtCTypeByNo::TypeData TypeDataHere4 ; - - typedef ZtCTypeByNo::TypeChain TypeChainHere0; - typedef ZtCTypeByNo::TypeChain TypeChainHere1; - typedef ZtCTypeByNo::TypeChain TypeChainHere2; - typedef ZtCTypeByNo::TypeChain TypeChainHere3; - typedef ZtCTypeByNo::TypeChain TypeChainHere4; - - cout<<"# TypeDataHere0 ="<(0.8); - VO_ZCObjtChain.SetDataRecur<1>(9999); + VO_ZCObjtChain.SetDataRecur<1>(9990); VO_ZCObjtChain.IterHead(ZftMCP(VO_ZCTypeView)); cout<<"************************************"<()=('E'); + *VO_ZCObjtChain.GetChainByNo<1>()=(string("New4 Str")); + *VO_ZCObjtChain.GetChainByNo<2>()=(1.8); + *VO_ZCObjtChain.GetChainByNo<3>()=(9999); + VO_ZCObjtChain.IterHead(ZftMCP(VO_ZCTypeView)); + cout<<"#VO_ZCObjtChain = "<::TypeData TypeDataHere0 ; typedef ZtCTypeByNo::TypeData TypeDataHere1 ;