commit 2025-10-17 20:54 add class ZtCCheckRef<TType&> : ZCppMain/ZMainHead.H

This commit is contained in:
2025-10-17 20:55:05 +09:00
parent 0e4ae40622
commit e7692ddfd1
2 changed files with 116 additions and 53 deletions

View File

@ -1081,6 +1081,26 @@ namespace ZNsMain
class ZtCCheckRef #################################################*/ class ZtCCheckRef #################################################*/
/* 참조 전문화 */
template<typename TType>
class ZtCCheckRef<TType&> /*#######################################*/
{
public :
typedef TType& TypeData;
typedef TType TypeRaw ;
private:
TypeData mr_Data;
public :
ZtCCheckRef(TypeData AR_TypeData) : mr_Data(AR_TypeData){}
public :
TypeData GetData(){return mr_Data;}
public :
static TypeData PassData(TypeData AO_Data){return AO_Data;}
};/*
template<typename TType>
class ZtCCheckRef<TType&> #########################################*/
/* ZtCRef 전문화 */ /* ZtCRef 전문화 */
template<typename TType> template<typename TType>
class ZtCCheckRef< ZtCRef<TType> > /*##############################*/ class ZtCCheckRef< ZtCRef<TType> > /*##############################*/
@ -3277,18 +3297,17 @@ namespace ZNsMain
template<typename TTypeHelp> static void template<typename TTypeHelp> static void
IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp) IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
{ {
typedef ZNsMain:: typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZtCCheckRef<TTypeHelp> ZCCheckRef; typedef typename ZCCheckRef::TypeRaw TypeRaw ;
typedef ZCCheckRef::TypeRaw TypeRaw ;
AO_CView.template AO_CView.template OnMeetType<TypeChainNow, TypeRaw>
OnMeetType<TypeChainNow, TypeRaw> ( ZCCheckRef::PassData(AO_TypeHelp) ) ;
( ZCCheckRef::PassData(AO_TypeHelp) ) ; /*************************************************/
if(TypeChainNow::ZEBoolNext>0) if(TypeChainNow::ZEBoolNext>0)
{ {
TypeChainNext::template ZtCIterChain<TViewChain> TypeChainNext::template ZtCIterChain<TViewChain>::
::template IterHead<TTypeHelp>(AO_CView, AO_TypeHelp) ; template IterHead<TTypeHelp>(AO_CView, AO_TypeHelp) ;
}/* }/*
if(TypeChainNow::ZEBoolNext>0)*/ if(TypeChainNow::ZEBoolNext>0)*/
}/* }/*
@ -3298,20 +3317,17 @@ namespace ZNsMain
template<typename TTypeHelp> static void template<typename TTypeHelp> static void
IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
{ {
typedef ZNsMain:: typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZtCCheckRef<TTypeHelp> ZCCheckRef; typedef typename ZCCheckRef::TypeRaw TypeRaw ;
typedef ZCCheckRef::TypeRaw TypeRaw ;
if(TypeChainNow::ZEBoolNext>0) if(TypeChainNow::ZEBoolNext>0)
{ {
TypeChainNext::template ZtCIterChain<TViewChain> TypeChainNext::template ZtCIterChain<TViewChain>::
::template IterTail<TTypeHelp>(AO_CView, AO_TypeHelp) ; template IterTail<TTypeHelp>(AO_CView, AO_TypeHelp) ;
}/* }
if(TypeChainNow::ZEBoolNext>0)*/ AO_CView.template OnMeetType<TypeChainNow, TypeRaw>
( ZCCheckRef::PassData(AO_TypeHelp) ) ;
AO_CView.template /*************************************************/
OnMeetType<TypeChainNow, TypeRaw>
( ZCCheckRef::PassData(AO_TypeHelp) ) ;
}/* }/*
template<typename TTypeHelp> static void template<typename TTypeHelp> static void
IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/ IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/
@ -3354,13 +3370,13 @@ namespace ZNsMain
{ AO_CView.template OnMeetType<TypeChainNow>(); } { AO_CView.template OnMeetType<TypeChainNow>(); }
static void IterTail(TViewChain AO_CView) static void IterTail(TViewChain AO_CView)
{ AO_CView.template OnMeetType<TypeChainNow>(); } { AO_CView.template OnMeetType<TypeChainNow>(); }
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
template<typename TTypeHelp> static void template<typename TTypeHelp> static void
IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp) IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
{ {
typedef ZNsMain:: typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZtCCheckRef<TTypeHelp> ZCCheckRef ; typedef typename ZCCheckRef::TypeRaw TypeRaw ;
typedef ZCCheckRef::TypeRaw TypeRaw ;
AO_CView.template OnMeetType<TypeChainNow, TypeRaw> AO_CView.template OnMeetType<TypeChainNow, TypeRaw>
( ZCCheckRef::PassData(AO_TypeHelp) ); ( ZCCheckRef::PassData(AO_TypeHelp) );
@ -3368,18 +3384,16 @@ namespace ZNsMain
template<typename TTypeHelp> static void template<typename TTypeHelp> static void
IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/ IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ /*****************************************************************/
template<typename TTypeHelp> static void template<typename TTypeHelp> static void
IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp) IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
{ {
typedef ZNsMain:: typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZtCCheckRef<TTypeHelp> ZCCheckRef; typedef typename ZCCheckRef::TypeRaw TypeRaw ;
typedef ZCCheckRef::TypeRaw TypeRaw ;
AO_CView.template AO_CView.template OnMeetType<TypeChainNow, TypeRaw>
OnMeetType<TypeChainNow, TypeRaw> ( ZCCheckRef::PassData(AO_TypeHelp) ) ;
( ZCCheckRef::PassData(AO_TypeHelp) ) ;
}/* }/*
template<typename TTypeHelp> static void template<typename TTypeHelp> static void
IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/ IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)*/
@ -3392,52 +3406,51 @@ namespace ZNsMain
template<typename TTmplChain, typename TTypeView> template<typename TTmplChain, typename TTypeView>
void ZftIterTmplChainHead(TTypeView AO_View) void ZftIterTmplChainHead(TTypeView AO_CView)
{ {
AO_View.template OnMeetType<TTmplChain>(); AO_CView.template OnMeetType<TTmplChain>();
if(TTmplChain::ZEBoolNext>0) if(TTmplChain::ZEBoolNext>0)
{ {
typedef typename typedef typename
TTmplChain::TypeChainNext TypeChainNext; TTmplChain::TypeChainNext TypeChainNext;
ZftIterTmplChainHead<TypeChainNext, TTypeView>(AO_View); ZftIterTmplChainHead<TypeChainNext, TTypeView>(AO_CView);
}/* }/*
if(TTmplChain::ZEBoolNext>0)*/ if(TTmplChain::ZEBoolNext>0)*/
}/* }/*
template<typename TTmplChain, typename TTypeView> template<typename TTmplChain, typename TTypeView>
void ZftIterTmplChainHead(TTypeView AO_View) void ZftIterTmplChainHead(TTypeView AO_CView)
*/ */
template<typename TTmplChain, typename TTypeView> template<typename TTmplChain, typename TTypeView>
void ZftIterTmplChainTail(TTypeView AO_View) void ZftIterTmplChainTail(TTypeView AO_CView)
{ {
if(TTmplChain::ZEBoolNext>0) if(TTmplChain::ZEBoolNext>0)
{ {
typedef typename typedef typename
TTmplChain::TypeChainNext TypeChainNext; TTmplChain::TypeChainNext TypeChainNext;
ZftIterTmplChainTail<TypeChainNext, TTypeView>(AO_View); ZftIterTmplChainTail<TypeChainNext, TTypeView>(AO_CView);
}/* }/*
if(TTmplChain::ZEBoolNext>0)*/ if(TTmplChain::ZEBoolNext>0)*/
AO_View.template OnMeetType<TTmplChain>(); AO_CView.template OnMeetType<TTmplChain>();
}/* }/*
template<typename TTmplChain, typename TTypeView> template<typename TTmplChain, typename TTypeView>
void ZftIterTmplChainTail(TTypeView AO_View) void ZftIterTmplChainTail(TTypeView AO_CView)
*/ */
template template
<typename TTmplChain, typename TTypeView, typename TTypeHelp> <typename TTmplChain, typename TTypeView, typename TTypeHelp>
void ZftIterTmplChainHead void ZftIterTmplChainHead
(TTypeView AO_View, TTypeHelp AO_TypeHelp) (TTypeView AO_CView, TTypeHelp AO_TypeHelp)
/*#############################################################*/ /*#############################################################*/
{ {
typedef ZNsMain:: typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZtCCheckRef<TTypeHelp> ZCCheckRef ; typedef typename ZCCheckRef::TypeRaw TypeRaw ;
typedef ZCCheckRef::TypeRaw TypeRaw ;
AO_View.template OnMeetType<TTmplChain, TypeRaw> AO_CView.template OnMeetType<TTmplChain, TypeRaw>
( ZCCheckRef::PassData(AO_TypeHelp) ); ( ZCCheckRef::PassData(AO_TypeHelp) );
if(TTmplChain::ZEBoolNext>0) if(TTmplChain::ZEBoolNext>0)
@ -3447,26 +3460,25 @@ namespace ZNsMain
ZftIterTmplChainHead ZftIterTmplChainHead
<TypeChainNext, TTypeView, TTypeHelp> <TypeChainNext, TTypeView, TTypeHelp>
(AO_View, AO_TypeHelp); (AO_CView, AO_TypeHelp);
}/* }/*
if(TTmplChain::ZEBoolNext>0)*/ if(TTmplChain::ZEBoolNext>0)*/
}/* }/*
template template
<typename TTmplChain, typename TTypeView, typename TTypeHelp> <typename TTmplChain, typename TTypeView, typename TTypeHelp>
void ZftIterTmplChainHead void ZftIterTmplChainHead
(TTypeView AO_View, TTypeHelp AO_TypeHelp) (TTypeView AO_CView, TTypeHelp AO_TypeHelp)
###############################################################*/ ###############################################################*/
template template
<typename TTmplChain, typename TTypeView, typename TTypeHelp> <typename TTmplChain, typename TTypeView, typename TTypeHelp>
void ZftIterTmplChainTail void ZftIterTmplChainTail
(TTypeView AO_View, TTypeHelp AO_TypeHelp) (TTypeView AO_CView, TTypeHelp AO_TypeHelp)
/*#############################################################*/ /*#############################################################*/
{ {
typedef ZNsMain:: typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZtCCheckRef<TTypeHelp> ZCCheckRef ; typedef typename ZCCheckRef::TypeRaw TypeRaw ;
typedef ZCCheckRef::TypeRaw TypeRaw ;
if(TTmplChain::ZEBoolNext>0) if(TTmplChain::ZEBoolNext>0)
{ {
@ -3475,17 +3487,17 @@ namespace ZNsMain
ZftIterTmplChainTail ZftIterTmplChainTail
<TypeChainNext, TTypeView, TTypeHelp> <TypeChainNext, TTypeView, TTypeHelp>
(AO_View, AO_TypeHelp); (AO_CView, AO_TypeHelp);
}/* }/*
if(TTmplChain::ZEBoolNext>0)*/ if(TTmplChain::ZEBoolNext>0)*/
AO_View.template OnMeetType<TTmplChain, TypeRaw> AO_CView.template OnMeetType<TTmplChain, TypeRaw>
( ZCCheckRef::PassData(AO_TypeHelp) ); ( ZCCheckRef::PassData(AO_TypeHelp) );
}/* }/*
template template
<typename TTmplChain, typename TTypeView, typename TTypeHelp> <typename TTmplChain, typename TTypeView, typename TTypeHelp>
void ZftIterTmplChainTail void ZftIterTmplChainTail
(TTypeView AO_View, TTypeHelp AO_TypeHelp) (TTypeView AO_CView, TTypeHelp AO_TypeHelp)
###############################################################*/ ###############################################################*/
@ -3506,7 +3518,7 @@ namespace ZNsMain
{ {
cout<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl; cout<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
} }
template<typename TTypChain, typename TTypHelp> void OnMeetType(TTypHelp& AR_CallNo) template<typename TTypChain, typename TTypHelp> void OnMeetType(int& AR_CallNo)
{ {
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;
} }
@ -3526,7 +3538,7 @@ namespace ZNsMain
int VI_CallNo = 0; int VI_CallNo = 0;
cout<<"temp chain size = "<<ZCTypeChain::Size()<<endl; cout<<"tmpl chain size = "<<ZCTypeChain::Size()<<endl;
ZftIterTmplChainTail<ZCTypeChain, ZCTypeView&>(VO_ZCTypeView); ZftIterTmplChainTail<ZCTypeChain, ZCTypeView&>(VO_ZCTypeView);

View File

@ -376,8 +376,59 @@ namespace ZNsMain
static void ShowNode11_3(ZCLink11& AR_CLink, ZTypLong& ARRI_CallCnt)*/ static void ShowNode11_3(ZCLink11& AR_CLink, ZTypLong& ARRI_CallCnt)*/
class ZCTypeView
{
public:
template<typename TTypChain> void OnMeetType()
{
cout<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
template<typename TTypChain, typename TTypHelp> void OnMeetType(int& AR_CallNo)
{
cout<<"* Call No="<<++AR_CallNo<<" : "<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
};/*
class ZCTypeView*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0) static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{ {
typedef ZtCTypeChain
<
double , ZtCTypeChain<
int , ZtCTypeChain<
wchar_t, ZtCTypeChain<
char ,
ZCEmpty > > >
> ZCTypeChain; ZCTypeView VO_ZCTypeView;
int VI_CallNo = 0;
cout<<"*** tmpl chain size = "<<ZCTypeChain::Size()<<endl;
ZftIterTmplChainTail<ZCTypeChain, ZCTypeView&>(VO_ZCTypeView);
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterHead(VO_ZCTypeView);
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterTail(VO_ZCTypeView);
ZftIterTmplChainHead<ZCTypeChain, ZCTypeView&, int&>
( VO_ZCTypeView, (VI_CallNo = 0) );
cout<<"************************************"<<endl;
ZftIterTmplChainTail<ZCTypeChain, ZCTypeView&, int&>
( VO_ZCTypeView, (VI_CallNo = 0) );
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::
IterHead(VO_ZCTypeView, ZftMCP(VI_CallNo=0));
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::
IterTail(VO_ZCTypeView, ZftMCP(VI_CallNo=0));
ZTypLong VI_CallCnt=0; ZTypLong VI_CallCnt=0;
CStringBase VO_CStringBase; CStringBase VO_CStringBase;