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 ;
@ -3830,93 +3832,99 @@ namespace ZNsMain
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);
static void IterHead(TViewChain AO_CView)
{
AO_CView.template OnMeetTypeVal<TypeChainNow>();
if(TypeChainNow::ZEBoolNext>0) if(TypeChainNow::ZEBoolNext>0)
{ {
static_cast<TypeChainNext&>(*this).IterHead(AO_CView); TypeChainNext::template
ZtCIterChain<TViewChain>::IterHead(AO_CView);
}/* }/*
if(TypeChainNow::ZEBoolNext>0)*/ if(TypeChainNow::ZEBoolNext>0)*/
}/* }/*
template<typename TViewChain> void IterHead(TViewChain AO_CView)*/ static void IterHead(TViewChain AO_CView)*/
template<typename TViewChain> void IterTail(TViewChain AO_CView) static void IterTail(TViewChain AO_CView)
{ {
if(TypeChainNow::ZEBoolNext>0) if(TypeChainNow::ZEBoolNext>0)
{ {
static_cast<TypeChainNext&>(*this).IterTail(AO_CView); TypeChainNext::template
ZtCIterChain<TViewChain>::IterTail(AO_CView);
}/* }/*
if(TypeChainNow::ZEBoolNext>0)*/ if(TypeChainNow::ZEBoolNext>0)*/
ZtCTypeData<TViewChain>:: AO_CView.template OnMeetTypeVal<TypeChainNow>();
GetObjRef(AO_CView).OnMeetData(*this);
}/* }/*
template<typename TViewChain> void IterTail(TViewChain AO_CView)*/ static void IterTail(TViewChain AO_CView)*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
template<typename TViewChain, typename TTypeHelp> template<typename TTypeHelp> static void
void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp) IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
{ {
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef; typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
typedef typename ZCCheckRef::TypeRaw TypeRaw ;
ZtCTypeData<TViewChain>::GetObjRef(AO_CView). AO_CView.template OnMeetTypeVal<TypeChainNow, TypeRaw>
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp)); ( ZCCheckRef::PassData(AO_TypeHelp) ) ;
/****************************************************/
if(TypeChainNow::ZEBoolNext>0) if(TypeChainNow::ZEBoolNext>0)
{ {
static_cast<TypeChainNext&>(*this). TypeChainNext::template ZtCIterChain<TViewChain>::
IterHead( AO_CView, AO_TypeHelp ) ; template IterHead<TTypeHelp>(AO_CView, AO_TypeHelp) ;
}/* }/*
if(TypeChainNow::ZEBoolNext>0)*/ if(TypeChainNow::ZEBoolNext>0)*/
}/* }/*
template<typename TViewChain, typename TTypeHelp> template<typename TTypeHelp> static void
void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/ IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/
template<typename TViewChain, typename TTypeHelp>
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
{
if(TypeChainNow::ZEBoolNext>0)
{
static_cast<TypeChainNext&>(*this).
IterTail( AO_CView, AO_TypeHelp ) ;
}/*
if(TypeChainNow::ZEBoolNext>0)*/
template<typename TTypeHelp> static void
IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
{
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef; typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
typedef typename ZCCheckRef::TypeRaw TypeRaw ;
ZtCTypeData<TViewChain>::GetObjRef(AO_CView). if(TypeChainNow::ZEBoolNext>0)
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp)); {
TypeChainNext::template ZtCIterChain<TViewChain>::
template IterTail<TTypeHelp>(AO_CView, AO_TypeHelp) ;
}
AO_CView.template OnMeetTypeVal<TypeChainNow, TypeRaw>
( ZCCheckRef::PassData(AO_TypeHelp) ) ;
/****************************************************/
}/* }/*
template<typename TViewChain, typename TTypeHelp> template<typename TTypeHelp> static void
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/
*/
public: public:
};/* };/*
template /*########################################################## template<typename TViewChain> class ZtCIterChain*/
public:
};/*
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 ;
@ -3932,54 +3940,63 @@ namespace ZNsMain
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>();
}/*
static void IterHead(TViewChain AO_CView)*/
static void IterTail(TViewChain AO_CView)
{
AO_CView.template OnMeetTypeVal<TypeChainNow>();
}/*
static void IterTail(TViewChain AO_CView)*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
template<typename TTypeHelp> static void
IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
{ {
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef; typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
typedef typename ZCCheckRef::TypeRaw TypeRaw ;
ZtCTypeData<TViewChain>::GetObjRef(AO_CView). AO_CView.template OnMeetTypeVal<TypeChainNow, TypeRaw>
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp)); ( ZCCheckRef::PassData(AO_TypeHelp) ) ;
} /****************************************************/
template<typename TViewChain, typename TTypeHelp> }/*
void IterTail(TViewChain AO_CView, TTypeHelp 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 ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
typedef typename ZCCheckRef::TypeRaw TypeRaw ;
ZtCTypeData<TViewChain>::GetObjRef(AO_CView). AO_CView.template OnMeetTypeVal<TypeChainNow, TypeRaw>
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp)); ( ZCCheckRef::PassData(AO_TypeHelp) ) ;
/****************************************************/
}/* }/*
template<typename TViewChain, typename TTypeHelp> template<typename TTypeHelp> static void
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/
*/
public: public:
};/* };/*
template /*########################################################## template<typename TViewChain> class ZtCIterChain*/
public:
};/*
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;