commit 2025-10-18 10:13 ZtCObjtChainEx => ZtCMiniValChain : ZCppMain/ZMainHead.H
This commit is contained in:
@ -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> ////////////////*/
|
||||
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user