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);
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterHead(VO_ZCTypeView);
//ZCTypeChain::ZtCIterChain<ZCTypeView >::IterHead(VO_ZCTypeView);
ZCTypeChain::ZtCIterChain<ZCTypeView&>::IterHead(VO_ZCTypeView);
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterTail(VO_ZCTypeView);
//ZCTypeChain::ZtCIterChain<ZCTypeView >::IterTail(VO_ZCTypeView);
ZCTypeChain::ZtCIterChain<ZCTypeView&>::IterTail(VO_ZCTypeView);
ZftIterTypeChainHead<ZCTypeChain, ZCTypeView&, int&>
( VO_ZCTypeView, (VI_CallNo = 0) );
@ -3696,7 +3698,7 @@ namespace ZNsMain
*/
public:
};/*
template /*##########################################################
template ############################################################
<
typename TTypeNow, typename TTypeNextChain
>
@ -3773,7 +3775,7 @@ namespace ZNsMain
*/
public:
};/*
template /*##########################################################
template ############################################################
< typename TTypeNow >
class ZtCObjtChain<TTypeNow, ZCEmpty> /////////////////////////////*/
@ -3781,27 +3783,27 @@ namespace ZNsMain
/*///////////////////////////////////////////////////////////////////
■ class ZtCObjtChainEx<>
■ class ZtCMiniValChain<>
자료형 TTypeNow 에 대하여, 기본값 TTypeVar 으로 자동 초기화하려는
목적으로 만들었으나, 기본 자료형 즉 int, long, char 에 대해서만 동
작하고 class 에서는 동작하지 않는다. 리눅스에서는 double 형에 대해
서도 동작하지 않는다. -- 2025-10-18 00:17
■ class ZtCObjtChainEx<> 사용 예.
■ class ZtCMiniValChain<> 사용 예.
typedef ZtCObjtChainEx
typedef ZtCMiniValChain
<
char , 'a' , ZtCObjtChainEx<
long , 1567 , ZtCObjtChainEx<
char , 'a' , ZtCObjtChainEx<
char , 'a' , ZtCObjtChainEx<
char , 'c' , ZtCObjtChainEx<
char , 'd' , ZtCObjtChainEx<
char , 'f' , ZtCObjtChainEx<
char , 'a' , ZtCMiniValChain<
long , 1567 , ZtCMiniValChain<
char , 'a' , ZtCMiniValChain<
char , 'a' , ZtCMiniValChain<
char , 'c' , ZtCMiniValChain<
char , 'd' , ZtCMiniValChain<
char , 'f' , ZtCMiniValChain<
int , 19 ,
ZCEmpty > > > > > > >
> ZtCObjtChainEx ;
> ZtCMiniValChain ;
잘하면 char 형의 조합으로, 문자열 비슷하게 사용할 수도 있겠다.
@ -3813,11 +3815,11 @@ namespace ZNsMain
<
typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain
>
class ZtCObjtChainEx : public TTypeNextChain ////////////////////////
class ZtCMiniValChain ///////////////////////////////////////////////
{
public :
typedef TTypeNow TypeData ;
typedef ZtCObjtChainEx TypeChainNow ;
typedef ZtCMiniValChain TypeChainNow ;
typedef TTypeNextChain TypeChainNext ;
/************************************************************/
typedef typename TypeChainNext::TypeData TypeNext ;
@ -3830,93 +3832,99 @@ namespace ZNsMain
static ZTypIntE Size (){return ZETypeNo;}
static ZTypIntE size (){return ZETypeNo;}
static ZTypIntE GetNo (){return ZETypeNo;}
private:
TypeData mo_TypeVar;
public :
ZtCObjtChainEx() : mo_TypeVar(TTypeVar){}
public :
TypeData & GetData() {return mo_TypeVar;}
TypeDataC& GetData() const{return mo_TypeVar;}
static TypeData GetData(){return TTypeVar;}
public :
template<typename TViewChain> void IterHead(TViewChain AO_CView)
template<typename TViewChain> class ZtCIterChain
{
ZtCTypeData<TViewChain>::
GetObjRef(AO_CView).OnMeetData(*this);
public:
static void IterHead(TViewChain AO_CView)
{
AO_CView.template OnMeetTypeVal<TypeChainNow>();
if(TypeChainNow::ZEBoolNext>0)
{
static_cast<TypeChainNext&>(*this).IterHead(AO_CView);
TypeChainNext::template
ZtCIterChain<TViewChain>::IterHead(AO_CView);
}/*
if(TypeChainNow::ZEBoolNext>0)*/
}/*
template<typename TViewChain> void IterHead(TViewChain AO_CView)*/
template<typename TViewChain> void IterTail(TViewChain AO_CView)
static void IterHead(TViewChain AO_CView)*/
static void IterTail(TViewChain AO_CView)
{
if(TypeChainNow::ZEBoolNext>0)
{
static_cast<TypeChainNext&>(*this).IterTail(AO_CView);
TypeChainNext::template
ZtCIterChain<TViewChain>::IterTail(AO_CView);
}/*
if(TypeChainNow::ZEBoolNext>0)*/
ZtCTypeData<TViewChain>::
GetObjRef(AO_CView).OnMeetData(*this);
AO_CView.template OnMeetTypeVal<TypeChainNow>();
}/*
template<typename TViewChain> void IterTail(TViewChain AO_CView)*/
static void IterTail(TViewChain AO_CView)*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
template<typename TViewChain, typename TTypeHelp>
void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
template<typename TTypeHelp> static void
IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
{
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
typedef typename ZCCheckRef::TypeRaw TypeRaw ;
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
AO_CView.template OnMeetTypeVal<TypeChainNow, TypeRaw>
( ZCCheckRef::PassData(AO_TypeHelp) ) ;
/****************************************************/
if(TypeChainNow::ZEBoolNext>0)
{
static_cast<TypeChainNext&>(*this).
IterHead( AO_CView, AO_TypeHelp ) ;
TypeChainNext::template ZtCIterChain<TViewChain>::
template IterHead<TTypeHelp>(AO_CView, AO_TypeHelp) ;
}/*
if(TypeChainNow::ZEBoolNext>0)*/
}/*
template<typename TViewChain, typename TTypeHelp>
void 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
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 ;
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
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) ) ;
/****************************************************/
}/*
template<typename TViewChain, typename TTypeHelp>
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
*/
template<typename TTypeHelp> static void
IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/
public:
};/*
template /*##########################################################
template<typename TViewChain> class ZtCIterChain*/
public:
};/*
template ############################################################
<
typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain
>
class ZtCObjtChainEx : public TTypeNextChain //////////////////////*/
class ZtCMiniValChain : public TTypeNextChain /////////////////////*/
template /*########################################################*/
<
typename TTypeNow, TTypeNow TTypeVar
>
class ZtCObjtChainEx<TTypeNow, TTypeVar, ZCEmpty> ///////////////////
class ZtCMiniValChain<TTypeNow, TTypeVar, ZCEmpty> //////////////////
{
public :
typedef ZtCObjtChainEx<TTypeNow, TTypeVar, ZCEmpty> ZCObjtChain;
typedef ZtCMiniValChain<TTypeNow, TTypeVar, ZCEmpty> ZCObjtChain;
public :
typedef TTypeNow TypeData ;
typedef ZCObjtChain TypeChainNow ;
@ -3932,54 +3940,63 @@ namespace ZNsMain
static ZTypIntE Size (){return ZETypeNo;}
static ZTypIntE size (){return ZETypeNo;}
static ZTypIntE GetNo (){return ZETypeNo;}
private:
TypeData mo_TypeVar;
public :
ZtCObjtChainEx() : mo_TypeVar(TTypeVar){}
public :
TypeData & GetData() {return mo_TypeVar;}
TypeDataC& GetData() const{return mo_TypeVar;}
static TypeData GetData(){return TTypeVar;}
public :
template<typename TViewChain> void IterHead(TViewChain AO_CView)
template<typename TViewChain> class ZtCIterChain
{
ZtCTypeData<TViewChain>::
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)*/
public:
template<typename TViewChain, typename TTypeHelp>
void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
static void IterHead(TViewChain AO_CView)
{
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 typename ZCCheckRef::TypeRaw TypeRaw ;
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
}
template<typename TViewChain, typename TTypeHelp>
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
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 ;
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
AO_CView.template OnMeetTypeVal<TypeChainNow, TypeRaw>
( ZCCheckRef::PassData(AO_TypeHelp) ) ;
/****************************************************/
}/*
template<typename TViewChain, typename TTypeHelp>
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
*/
template<typename TTypeHelp> static void
IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/
public:
};/*
template /*##########################################################
template<typename TViewChain> class ZtCIterChain*/
public:
};/*
template ############################################################
<
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;
}
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)
{
cout<<"* Type No="<<AR_NowChain.GetNo()<<" : "<<AR_NowChain.GetData()<<endl;
@ -108,28 +117,26 @@ namespace ZNsMain
cout<<myintvar2.MO_TypeVar<<endl;
typedef ZtCObjtChainEx
typedef ZtCMiniValChain
<
char , 'a' , ZtCObjtChainEx<
//double, 10.2 , ZtCObjtChainEx< // error in linux
//string, string("123") , ZtCObjtChainEx< // error
long , 10 , ZtCObjtChainEx<
char , 'a' , ZtCMiniValChain<
//double, 10.2 , ZtCMiniValChain< // error in linux
//string, string("123") , ZtCMiniValChain< // error
long , 10 , ZtCMiniValChain<
int , 19 ,
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;
VO_ZtCObjtChain.IterHead(ZftMCP(VO_ZCTypeView));
ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterHead(VO_ZCTypeView);
cout<<"************************************"<<endl;
VO_ZtCObjtChain.IterTail(ZftMCP(VO_ZCTypeView));
ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterTail(VO_ZCTypeView);
cout<<"************************************"<<endl;
VO_ZtCObjtChain.IterHead(ZftMCP(VO_ZCTypeView), ZftMCP(VI_CallNo = 0));
ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterHead(VO_ZCTypeView, ZftMCP(VI_CallNo = 0));
cout<<"************************************"<<endl;
VO_ZtCObjtChain.IterTail(ZftMCP(VO_ZCTypeView), ZftMCP(VI_CallNo = 0));
ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterTail(VO_ZCTypeView, ZftMCP(VI_CallNo = 0));
cout<<"************************************"<<endl;