commit 2025-10-22 19:59 add ZtCObjtChain::SetDataRecur() ZCppMain/ZMainHead.H

This commit is contained in:
2025-10-22 19:59:59 +09:00
parent 72cf94128d
commit ff02649ca3
2 changed files with 123 additions and 1 deletions

View File

@ -3613,7 +3613,43 @@ namespace ZNsMain
() 을 재정의해서, () 을 필요한 만큼 겹겹이 호출해서 접근하도록 했다.
아래 예제:202510200053 참고.
ZtCObjtChain<TDataNow, ZCEmpty>::TypeChainLast 을 추가해,
■ 아래 멈버 함수를 추가하고
template<typename TDataHere>
TypeChainNow & operator= (const TDataHere& AR_Data)
{ return *this;}
TypeChainNow & operator= (const TypeData & AR_Data)
{ mo_TypeVar=AR_Data; return *this;}
이를 활용하는 SetDataRecur()
template<int TTypNo, typename TDataHere>
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<TDataNow, ZCEmpty>::TypeChainLast 을 추가해,
마지막 TypeChainNext 즉 마지막 TypeChainNow
@ -3679,12 +3715,23 @@ namespace ZNsMain
*VO_ZCObjtChain()() =0.8 ;
*VO_ZCObjtChain()()() =1234 ;
VO_ZCObjtChain.IterHead(VO_ZCTypeView);
cout<<"************************************"<<endl;
VO_ZCObjtChain.GetData<ZCObjtChain>()='X';
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext>()="New2 Str";
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext::TypeChainNext>()=0.9;
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext::TypeChainNext::TypeChainNext>()=4321;
VO_ZCObjtChain.IterHead(VO_ZCTypeView);
cout<<"************************************"<<endl;
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);
VO_ZCObjtChain.IterHead(ZftMCP(VO_ZCTypeView));
cout<<"************************************"<<endl;
///////////////////////////////////////////////////////////////////*/
@ -3732,6 +3779,29 @@ namespace ZNsMain
{ return static_cast<TypeChainNext&>(*this); }
TypeChainNextC& operator() () const
{ return static_cast<TypeChainNext&>(*this); }
template<typename TDataHere>
TypeChainNow & operator= (const TDataHere& AR_Data)
{ /*:::::::::::::::*/ return *this;}
TypeChainNow & operator= (const TypeData & AR_Data)
{ mo_TypeVar=AR_Data; return *this;}
/************************************************************/
template<int TTypNo, typename TDataHere>
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<TTypNo, TDataHere>(AR_Data);
}/*
template<int TTypNo, typename TDataHere>
bool SetDataRecur(const TDataHere& AR_Data) */
/************************************************************/
template<typename TTypeChainNext> typename
@ -3858,6 +3928,24 @@ namespace ZNsMain
TypeChainNext & operator() () { return (*this); }
TypeChainNextC& operator() () const{ return (*this); }
template<typename TDataHere>
TypeChainNow & operator= (const TDataHere& AR_Data)
{ /*:::::::::::::::*/ return *this;}
TypeChainNow & operator= (const TypeData & AR_Data)
{ mo_TypeVar=AR_Data; return *this;}
/************************************************************/
template<int TTypNo, typename TDataHere>
bool SetDataRecur(const TDataHere& AR_Data)
{
if(TTypNo==TypeChainNow::ZETypeNo)
{*this=AR_Data; return true ;}
{/*::::::::::*/ return false;}
}/*
template<int TTypNo, typename TDataHere>
bool SetDataRecur(const TDataHere& AR_Data) */
/************************************************************/
template<typename TTypeChainNext> TypeData & GetData()

View File

@ -186,6 +186,40 @@ namespace ZNsMain
cout<<"************************************"<<endl;
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(ZftMCP(VO_ZCTypeView));
cout<<"************************************"<<endl;
VO_ZCObjtChain.GetData<ZCObjtChain>()='X';
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext>()="New2 Str";
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext::TypeChainNext>()=0.9;
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext::TypeChainNext::TypeChainNext>()=4321;
VO_ZCObjtChain.IterHead(ZftMCP(VO_ZCTypeView));
cout<<"************************************"<<endl;
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);
VO_ZCObjtChain.IterHead(ZftMCP(VO_ZCTypeView));
cout<<"************************************"<<endl;
typedef ZtCDataRing<std::string> ZCDataRing;
ZCDataRing VO_CDataRing = string("123");