commit 2025-10-18 10:13 ZtCObjtChainEx => ZtCMiniValChain : ZCppMain/ZMainHead.H

This commit is contained in:
2025-10-18 10:13:33 +09:00
parent e57cce5a28
commit 4113a0a6f1
2 changed files with 155 additions and 131 deletions

View File

@ -3561,9 +3561,11 @@ namespace ZNsMain
ZftIterTypeChainTail<ZCTypeChain, ZCTypeView&>(VO_ZCTypeView); ZftIterTypeChainTail<ZCTypeChain, ZCTypeView&>(VO_ZCTypeView);
cout<<"************************************"<<endl; cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterHead(VO_ZCTypeView); //ZCTypeChain::ZtCIterChain<ZCTypeView >::IterHead(VO_ZCTypeView);
ZCTypeChain::ZtCIterChain<ZCTypeView&>::IterHead(VO_ZCTypeView);
cout<<"************************************"<<endl; cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterTail(VO_ZCTypeView); //ZCTypeChain::ZtCIterChain<ZCTypeView >::IterTail(VO_ZCTypeView);
ZCTypeChain::ZtCIterChain<ZCTypeView&>::IterTail(VO_ZCTypeView);
ZftIterTypeChainHead<ZCTypeChain, ZCTypeView&, int&> ZftIterTypeChainHead<ZCTypeChain, ZCTypeView&, int&>
( VO_ZCTypeView, (VI_CallNo = 0) ); ( VO_ZCTypeView, (VI_CallNo = 0) );
@ -3696,7 +3698,7 @@ namespace ZNsMain
*/ */
public: public:
};/* };/*
template /*########################################################## template ############################################################
< <
typename TTypeNow, typename TTypeNextChain typename TTypeNow, typename TTypeNextChain
> >
@ -3773,7 +3775,7 @@ namespace ZNsMain
*/ */
public: public:
};/* };/*
template /*########################################################## template ############################################################
< typename TTypeNow > < typename TTypeNow >
class ZtCObjtChain<TTypeNow, ZCEmpty> /////////////////////////////*/ class ZtCObjtChain<TTypeNow, ZCEmpty> /////////////////////////////*/
@ -3781,27 +3783,27 @@ namespace ZNsMain
/*/////////////////////////////////////////////////////////////////// /*///////////////////////////////////////////////////////////////////
■ class ZtCObjtChainEx<> ■ class ZtCMiniValChain<>
자료형 TTypeNow 에 대하여, 기본값 TTypeVar 으로 자동 초기화하려는 자료형 TTypeNow 에 대하여, 기본값 TTypeVar 으로 자동 초기화하려는
목적으로 만들었으나, 기본 자료형 즉 int, long, char 에 대해서만 동 목적으로 만들었으나, 기본 자료형 즉 int, long, char 에 대해서만 동
작하고 class 에서는 동작하지 않는다. 리눅스에서는 double 형에 대해 작하고 class 에서는 동작하지 않는다. 리눅스에서는 double 형에 대해
서도 동작하지 않는다. -- 2025-10-18 00:17 서도 동작하지 않는다. -- 2025-10-18 00:17
■ class ZtCObjtChainEx<> 사용 예. ■ class ZtCMiniValChain<> 사용 예.
typedef ZtCObjtChainEx typedef ZtCMiniValChain
< <
char , 'a' , ZtCObjtChainEx< char , 'a' , ZtCMiniValChain<
long , 1567 , ZtCObjtChainEx< long , 1567 , ZtCMiniValChain<
char , 'a' , ZtCObjtChainEx< char , 'a' , ZtCMiniValChain<
char , 'a' , ZtCObjtChainEx< char , 'a' , ZtCMiniValChain<
char , 'c' , ZtCObjtChainEx< char , 'c' , ZtCMiniValChain<
char , 'd' , ZtCObjtChainEx< char , 'd' , ZtCMiniValChain<
char , 'f' , ZtCObjtChainEx< char , 'f' , ZtCMiniValChain<
int , 19 , int , 19 ,
ZCEmpty > > > > > > > ZCEmpty > > > > > > >
> ZtCObjtChainEx ; > ZtCMiniValChain ;
잘하면 char 형의 조합으로, 문자열 비슷하게 사용할 수도 있겠다. 잘하면 char 형의 조합으로, 문자열 비슷하게 사용할 수도 있겠다.
@ -3813,11 +3815,11 @@ namespace ZNsMain
< <
typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain
> >
class ZtCObjtChainEx : public TTypeNextChain //////////////////////// class ZtCMiniValChain ///////////////////////////////////////////////
{ {
public : public :
typedef TTypeNow TypeData ; typedef TTypeNow TypeData ;
typedef ZtCObjtChainEx TypeChainNow ; typedef ZtCMiniValChain TypeChainNow ;
typedef TTypeNextChain TypeChainNext ; typedef TTypeNextChain TypeChainNext ;
/************************************************************/ /************************************************************/
typedef typename TypeChainNext::TypeData TypeNext ; typedef typename TypeChainNext::TypeData TypeNext ;
@ -3827,96 +3829,102 @@ namespace ZNsMain
enum{ZETypeNo = TypeChainNext::ZETypeNo+1}; enum{ZETypeNo = TypeChainNext::ZETypeNo+1};
enum{ZEBoolNext = 1 }; enum{ZEBoolNext = 1 };
public : public :
static ZTypIntE Size (){return ZETypeNo;} static ZTypIntE Size (){return ZETypeNo;}
static ZTypIntE size (){return ZETypeNo;} static ZTypIntE size (){return ZETypeNo;}
static ZTypIntE GetNo(){return ZETypeNo;} static ZTypIntE GetNo (){return ZETypeNo;}
private: static TypeData GetData(){return TTypeVar;}
TypeData mo_TypeVar;
public :
ZtCObjtChainEx() : mo_TypeVar(TTypeVar){}
public :
TypeData & GetData() {return mo_TypeVar;}
TypeDataC& GetData() const{return mo_TypeVar;}
public : public :
template<typename TViewChain> void IterHead(TViewChain AO_CView) template<typename TViewChain> class ZtCIterChain
{ {
ZtCTypeData<TViewChain>:: public:
GetObjRef(AO_CView).OnMeetData(*this);
if(TypeChainNow::ZEBoolNext>0) static void IterHead(TViewChain AO_CView)
{ {
static_cast<TypeChainNext&>(*this).IterHead(AO_CView); AO_CView.template OnMeetTypeVal<TypeChainNow>();
if(TypeChainNow::ZEBoolNext>0)
{
TypeChainNext::template
ZtCIterChain<TViewChain>::IterHead(AO_CView);
}/*
if(TypeChainNow::ZEBoolNext>0)*/
}/* }/*
if(TypeChainNow::ZEBoolNext>0)*/ static void IterHead(TViewChain AO_CView)*/
}/* static void IterTail(TViewChain AO_CView)
template<typename TViewChain> void IterHead(TViewChain AO_CView)*/
template<typename TViewChain> void IterTail(TViewChain AO_CView)
{
if(TypeChainNow::ZEBoolNext>0)
{ {
static_cast<TypeChainNext&>(*this).IterTail(AO_CView); if(TypeChainNow::ZEBoolNext>0)
{
TypeChainNext::template
ZtCIterChain<TViewChain>::IterTail(AO_CView);
}/*
if(TypeChainNow::ZEBoolNext>0)*/
AO_CView.template OnMeetTypeVal<TypeChainNow>();
}/* }/*
if(TypeChainNow::ZEBoolNext>0)*/ static void IterTail(TViewChain AO_CView)*/
ZtCTypeData<TViewChain>:: /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
GetObjRef(AO_CView).OnMeetData(*this);
}/*
template<typename TViewChain> void IterTail(TViewChain AO_CView)*/
template<typename TTypeHelp> static void
template<typename TViewChain, typename TTypeHelp> IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
{
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
if(TypeChainNow::ZEBoolNext>0)
{ {
static_cast<TypeChainNext&>(*this). typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
IterHead( AO_CView, AO_TypeHelp ) ; typedef typename ZCCheckRef::TypeRaw TypeRaw ;
AO_CView.template OnMeetTypeVal<TypeChainNow, TypeRaw>
( ZCCheckRef::PassData(AO_TypeHelp) ) ;
/****************************************************/
if(TypeChainNow::ZEBoolNext>0)
{
TypeChainNext::template ZtCIterChain<TViewChain>::
template IterHead<TTypeHelp>(AO_CView, AO_TypeHelp) ;
}/*
if(TypeChainNow::ZEBoolNext>0)*/
}/* }/*
if(TypeChainNow::ZEBoolNext>0)*/ template<typename TTypeHelp> static void
}/* IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/
template<typename TViewChain, typename TTypeHelp>
void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/ template<typename TTypeHelp> static void
template<typename TViewChain, typename TTypeHelp> IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
{
if(TypeChainNow::ZEBoolNext>0)
{ {
static_cast<TypeChainNext&>(*this). typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
IterTail( AO_CView, AO_TypeHelp ) ; typedef typename ZCCheckRef::TypeRaw TypeRaw ;
if(TypeChainNow::ZEBoolNext>0)
{
TypeChainNext::template ZtCIterChain<TViewChain>::
template IterTail<TTypeHelp>(AO_CView, AO_TypeHelp) ;
}
AO_CView.template OnMeetTypeVal<TypeChainNow, TypeRaw>
( ZCCheckRef::PassData(AO_TypeHelp) ) ;
/****************************************************/
}/* }/*
if(TypeChainNow::ZEBoolNext>0)*/ template<typename TTypeHelp> static void
IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef; public:
};/*
template<typename TViewChain> class ZtCIterChain*/
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
}/*
template<typename TViewChain, typename TTypeHelp>
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
*/
public: public:
};/* };/*
template /*########################################################## template ############################################################
< <
typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain
> >
class ZtCObjtChainEx : public TTypeNextChain //////////////////////*/ class ZtCMiniValChain : public TTypeNextChain /////////////////////*/
template /*########################################################*/ template /*########################################################*/
< <
typename TTypeNow, TTypeNow TTypeVar typename TTypeNow, TTypeNow TTypeVar
> >
class ZtCObjtChainEx<TTypeNow, TTypeVar, ZCEmpty> /////////////////// class ZtCMiniValChain<TTypeNow, TTypeVar, ZCEmpty> //////////////////
{ {
public : public :
typedef ZtCObjtChainEx<TTypeNow, TTypeVar, ZCEmpty> ZCObjtChain; typedef ZtCMiniValChain<TTypeNow, TTypeVar, ZCEmpty> ZCObjtChain;
public : public :
typedef TTypeNow TypeData ; typedef TTypeNow TypeData ;
typedef ZCObjtChain TypeChainNow ; typedef ZCObjtChain TypeChainNow ;
@ -3929,57 +3937,66 @@ namespace ZNsMain
enum{ZETypeNo = 1 }; enum{ZETypeNo = 1 };
enum{ZEBoolNext = 0 }; enum{ZEBoolNext = 0 };
public : public :
static ZTypIntE Size (){return ZETypeNo;} static ZTypIntE Size (){return ZETypeNo;}
static ZTypIntE size (){return ZETypeNo;} static ZTypIntE size (){return ZETypeNo;}
static ZTypIntE GetNo(){return ZETypeNo;} static ZTypIntE GetNo (){return ZETypeNo;}
private: static TypeData GetData(){return TTypeVar;}
TypeData mo_TypeVar;
public :
ZtCObjtChainEx() : mo_TypeVar(TTypeVar){}
public :
TypeData & GetData() {return mo_TypeVar;}
TypeDataC& GetData() const{return mo_TypeVar;}
public : public :
template<typename TViewChain> void IterHead(TViewChain AO_CView) template<typename TViewChain> class ZtCIterChain
{ {
ZtCTypeData<TViewChain>:: public:
GetObjRef(AO_CView).OnMeetData(*this);
}/*
template<typename TViewChain> void IterHead(TViewChain AO_CView)*/
template<typename TViewChain> void IterTail(TViewChain AO_CView)
{
ZtCTypeData<TViewChain>::
GetObjRef(AO_CView).OnMeetData(*this);
}/*
template<typename TViewChain> void IterTail(TViewChain AO_CView)*/
template<typename TViewChain, typename TTypeHelp> static void IterHead(TViewChain AO_CView)
void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp) {
{ AO_CView.template OnMeetTypeVal<TypeChainNow>();
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef; }/*
static void IterHead(TViewChain AO_CView)*/
static void IterTail(TViewChain AO_CView)
{
AO_CView.template OnMeetTypeVal<TypeChainNow>();
}/*
static void IterTail(TViewChain AO_CView)*/
ZtCTypeData<TViewChain>::GetObjRef(AO_CView). /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
} template<typename TTypeHelp> static void
template<typename TViewChain, typename TTypeHelp> IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) {
{ typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef; typedef typename ZCCheckRef::TypeRaw TypeRaw ;
AO_CView.template OnMeetTypeVal<TypeChainNow, TypeRaw>
( ZCCheckRef::PassData(AO_TypeHelp) ) ;
/****************************************************/
}/*
template<typename TTypeHelp> static void
IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/
template<typename TTypeHelp> static void
IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
{
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
typedef typename ZCCheckRef::TypeRaw TypeRaw ;
AO_CView.template OnMeetTypeVal<TypeChainNow, TypeRaw>
( ZCCheckRef::PassData(AO_TypeHelp) ) ;
/****************************************************/
}/*
template<typename TTypeHelp> static void
IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/
public:
};/*
template<typename TViewChain> class ZtCIterChain*/
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
}/*
template<typename TViewChain, typename TTypeHelp>
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
*/
public: public:
};/* };/*
template /*########################################################## template ############################################################
< <
typename TTypeNow, TTypeNow TTypeVar typename TTypeNow, TTypeNow TTypeVar
> >
class ZtCObjtChainEx<TTypeNow, TTypeVar, ZCEmpty> /////////////////*/ class ZtCMiniValChain<TTypeNow, TTypeVar, ZCEmpty> ////////////////*/

View File

@ -70,6 +70,15 @@ namespace ZNsMain
cout<<"* Call No="<<++AR_CallNo<<" : "<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl; cout<<"* Call No="<<++AR_CallNo<<" : "<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
} }
template<typename TTypChain> void OnMeetTypeVal()
{
cout<<"* Val="<<TTypChain::GetData()<<", ETypeNo="<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
template<typename TTypChain, typename TTypHelp> void OnMeetTypeVal(TTypHelp& AR_CallNo)
{
cout<<"* Call No="<<++AR_CallNo<<" : Val="<<TTypChain::GetData()<<", ETypeNo="<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
template<typename TObjtChain> void OnMeetData(TObjtChain& AR_NowChain) template<typename TObjtChain> void OnMeetData(TObjtChain& AR_NowChain)
{ {
cout<<"* Type No="<<AR_NowChain.GetNo()<<" : "<<AR_NowChain.GetData()<<endl; cout<<"* Type No="<<AR_NowChain.GetNo()<<" : "<<AR_NowChain.GetData()<<endl;
@ -108,28 +117,26 @@ namespace ZNsMain
cout<<myintvar2.MO_TypeVar<<endl; cout<<myintvar2.MO_TypeVar<<endl;
typedef ZtCObjtChainEx typedef ZtCMiniValChain
< <
char , 'a' , ZtCObjtChainEx< char , 'a' , ZtCMiniValChain<
//double, 10.2 , ZtCObjtChainEx< // error in linux //double, 10.2 , ZtCMiniValChain< // error in linux
//string, string("123") , ZtCObjtChainEx< // error //string, string("123") , ZtCMiniValChain< // error
long , 10 , ZtCObjtChainEx< long , 10 , ZtCMiniValChain<
int , 19 , int , 19 ,
ZCEmpty > > ZCEmpty > >
> ZtCObjtChainEx; ZCTypeView VO_ZCTypeView; > ZCMiniValChain; ZCTypeView VO_ZCTypeView; int VI_CallNo = 0;
ZtCObjtChainEx VO_ZtCObjtChain; int VI_CallNo = 0; cout<<"# ZCMiniValChain.size()="<<ZCMiniValChain::size()<<endl;
cout<<"# VO_ZtCObjtChain.size()="<<VO_ZtCObjtChain.size()<<endl; ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterHead(VO_ZCTypeView);
VO_ZtCObjtChain.IterHead(ZftMCP(VO_ZCTypeView));
cout<<"************************************"<<endl; cout<<"************************************"<<endl;
VO_ZtCObjtChain.IterTail(ZftMCP(VO_ZCTypeView)); ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterTail(VO_ZCTypeView);
cout<<"************************************"<<endl; cout<<"************************************"<<endl;
VO_ZtCObjtChain.IterHead(ZftMCP(VO_ZCTypeView), ZftMCP(VI_CallNo = 0)); ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterHead(VO_ZCTypeView, ZftMCP(VI_CallNo = 0));
cout<<"************************************"<<endl; cout<<"************************************"<<endl;
VO_ZtCObjtChain.IterTail(ZftMCP(VO_ZCTypeView), ZftMCP(VI_CallNo = 0)); ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterTail(VO_ZCTypeView, ZftMCP(VI_CallNo = 0));
cout<<"************************************"<<endl; cout<<"************************************"<<endl;