commit 2025-10-22 19:59 add ZtCObjtChain::SetDataRecur() ZCppMain/ZMainHead.H
This commit is contained in:
@ -3613,7 +3613,43 @@ namespace ZNsMain
|
|||||||
() 을 재정의해서, () 을 필요한 만큼 겹겹이 호출해서 접근하도록 했다.
|
() 을 재정의해서, () 을 필요한 만큼 겹겹이 호출해서 접근하도록 했다.
|
||||||
아래 예제:202510200053 참고.
|
아래 예제: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
|
마지막 TypeChainNext 즉 마지막 TypeChainNow
|
||||||
|
|
||||||
@ -3679,12 +3715,23 @@ namespace ZNsMain
|
|||||||
*VO_ZCObjtChain()() =0.8 ;
|
*VO_ZCObjtChain()() =0.8 ;
|
||||||
*VO_ZCObjtChain()()() =1234 ;
|
*VO_ZCObjtChain()()() =1234 ;
|
||||||
VO_ZCObjtChain.IterHead(VO_ZCTypeView);
|
VO_ZCObjtChain.IterHead(VO_ZCTypeView);
|
||||||
|
cout<<"************************************"<<endl;
|
||||||
|
|
||||||
VO_ZCObjtChain.GetData<ZCObjtChain>()='X';
|
VO_ZCObjtChain.GetData<ZCObjtChain>()='X';
|
||||||
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext>()="New2 Str";
|
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext>()="New2 Str";
|
||||||
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext::TypeChainNext>()=0.9;
|
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext::TypeChainNext>()=0.9;
|
||||||
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext::TypeChainNext::TypeChainNext>()=4321;
|
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext::TypeChainNext::TypeChainNext>()=4321;
|
||||||
VO_ZCObjtChain.IterHead(VO_ZCTypeView);
|
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); }
|
{ return static_cast<TypeChainNext&>(*this); }
|
||||||
TypeChainNextC& operator() () const
|
TypeChainNextC& operator() () const
|
||||||
{ return static_cast<TypeChainNext&>(*this); }
|
{ 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
|
template<typename TTypeChainNext> typename
|
||||||
@ -3858,6 +3928,24 @@ namespace ZNsMain
|
|||||||
|
|
||||||
TypeChainNext & operator() () { return (*this); }
|
TypeChainNext & operator() () { return (*this); }
|
||||||
TypeChainNextC& operator() () const{ 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()
|
template<typename TTypeChainNext> TypeData & GetData()
|
||||||
|
@ -186,6 +186,40 @@ namespace ZNsMain
|
|||||||
cout<<"************************************"<<endl;
|
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;
|
typedef ZtCDataRing<std::string> ZCDataRing;
|
||||||
|
|
||||||
ZCDataRing VO_CDataRing = string("123");
|
ZCDataRing VO_CDataRing = string("123");
|
||||||
|
Reference in New Issue
Block a user