commit 2025-10-22 19:59 add ZtCObjtChain::SetDataRecur() ZCppMain/ZMainHead.H
This commit is contained in:
@ -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()
|
||||
|
@ -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");
|
||||
|
Reference in New Issue
Block a user