From ff02649ca31f06604a12131a1e85c9eda5f67721 Mon Sep 17 00:00:00 2001 From: sauron Date: Wed, 22 Oct 2025 19:59:59 +0900 Subject: [PATCH] commit 2025-10-22 19:59 add ZtCObjtChain::SetDataRecur() ZCppMain/ZMainHead.H --- ZCppMain/ZMainHead.H | 90 ++++++++++++++++++++++++++++++++++++++++++- ZCppMainTest/c++_test_006.cpp | 34 ++++++++++++++++ 2 files changed, 123 insertions(+), 1 deletion(-) diff --git a/ZCppMain/ZMainHead.H b/ZCppMain/ZMainHead.H index b74dd52..6761bf6 100644 --- a/ZCppMain/ZMainHead.H +++ b/ZCppMain/ZMainHead.H @@ -3613,7 +3613,43 @@ namespace ZNsMain () 을 재정의해서, () 을 필요한 만큼 겹겹이 호출해서 접근하도록 했다. 아래 예제:202510200053 참고. - ZtCObjtChain::TypeChainLast 을 추가해, + ■ 아래 멈버 함수를 추가하고 + + template + TypeChainNow & operator= (const TDataHere& AR_Data) + { return *this;} + TypeChainNow & operator= (const TypeData & AR_Data) + { mo_TypeVar=AR_Data; return *this;} + + 이를 활용하는 SetDataRecur() + + template + bool SetDataRecur(const TDataHere& AR_Data) + + 를 추가. 그래서 이런 예제가 가능하다. + + typedef ZtCObjtChain + < + char , ZtCObjtChain< + string, ZtCObjtChain< + double, ZtCObjtChain< + int , + ZCEmpty > > > + > ZCObjtChain; ZCObjtChain VO_ZCObjtChain; + + VO_ZCObjtChain="New3 Str"; + VO_ZCObjtChain='B'; + VO_ZCObjtChain.SetDataRecur<4>('D'); + VO_ZCObjtChain.SetDataRecur<3>(string("New3 Str")); + VO_ZCObjtChain.SetDataRecur<2>(0.8); + VO_ZCObjtChain.SetDataRecur<1>(9999); + + 와, 멤버 변수 변경이 이렇게 깔끔하게 될 수 있다니... + C++ 진짜 멋지다! + + -- 2025-10-22 19:41 + + ■ ZtCObjtChain::TypeChainLast 을 추가해, 마지막 TypeChainNext 즉 마지막 TypeChainNow @@ -3679,12 +3715,23 @@ namespace ZNsMain *VO_ZCObjtChain()() =0.8 ; *VO_ZCObjtChain()()() =1234 ; VO_ZCObjtChain.IterHead(VO_ZCTypeView); + cout<<"************************************"<()='X'; VO_ZCObjtChain.GetData()="New2 Str"; VO_ZCObjtChain.GetData()=0.9; VO_ZCObjtChain.GetData()=4321; VO_ZCObjtChain.IterHead(VO_ZCTypeView); + cout<<"************************************"<('D'); + VO_ZCObjtChain.SetDataRecur<3>(string("New3 Str")); + VO_ZCObjtChain.SetDataRecur<2>(0.8); + VO_ZCObjtChain.SetDataRecur<1>(9999); + VO_ZCObjtChain.IterHead(ZftMCP(VO_ZCTypeView)); + cout<<"************************************"<(*this); } TypeChainNextC& operator() () const { return static_cast(*this); } + + template + TypeChainNow & operator= (const TDataHere& AR_Data) + { /*:::::::::::::::*/ return *this;} + TypeChainNow & operator= (const TypeData & AR_Data) + { mo_TypeVar=AR_Data; return *this;} + + /************************************************************/ + + template + bool SetDataRecur(const TDataHere& AR_Data) + { + if(TTypNo==TypeChainNow::ZETypeNo) + {*this=AR_Data; return true;} + if(TTypNo>TypeChainNow::ZETypeNo) + {/*::::::::::*/ return false;} + + return this->TypeChainNext::template + SetDataRecur(AR_Data); + }/* + template + bool SetDataRecur(const TDataHere& AR_Data) */ + /************************************************************/ template typename @@ -3858,6 +3928,24 @@ namespace ZNsMain TypeChainNext & operator() () { return (*this); } TypeChainNextC& operator() () const{ return (*this); } + + template + TypeChainNow & operator= (const TDataHere& AR_Data) + { /*:::::::::::::::*/ return *this;} + TypeChainNow & operator= (const TypeData & AR_Data) + { mo_TypeVar=AR_Data; return *this;} + /************************************************************/ + + template + bool SetDataRecur(const TDataHere& AR_Data) + { + if(TTypNo==TypeChainNow::ZETypeNo) + {*this=AR_Data; return true ;} + {/*::::::::::*/ return false;} + }/* + template + bool SetDataRecur(const TDataHere& AR_Data) */ + /************************************************************/ template TypeData & GetData() diff --git a/ZCppMainTest/c++_test_006.cpp b/ZCppMainTest/c++_test_006.cpp index b5ea4dc..0c63c24 100644 --- a/ZCppMainTest/c++_test_006.cpp +++ b/ZCppMainTest/c++_test_006.cpp @@ -186,6 +186,40 @@ namespace ZNsMain cout<<"************************************"< > > + > 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(ZftMCP(VO_ZCTypeView)); + cout<<"************************************"<()='X'; + VO_ZCObjtChain.GetData()="New2 Str"; + VO_ZCObjtChain.GetData()=0.9; + VO_ZCObjtChain.GetData()=4321; + VO_ZCObjtChain.IterHead(ZftMCP(VO_ZCTypeView)); + cout<<"************************************"<('D'); + VO_ZCObjtChain.SetDataRecur<3>(string("New3 Str")); + VO_ZCObjtChain.SetDataRecur<2>(0.8); + VO_ZCObjtChain.SetDataRecur<1>(9999); + VO_ZCObjtChain.IterHead(ZftMCP(VO_ZCTypeView)); + cout<<"************************************"< ZCDataRing; ZCDataRing VO_CDataRing = string("123");