commit 2025-10-18 00:09 add ZtCObjtChain in ZCppMain/ZMainHead.H

This commit is contained in:
2025-10-18 00:09:09 +09:00
parent bea5561dc4
commit 31a6d46726

View File

@ -3264,6 +3264,15 @@ namespace ZNsMain
static ZTypIntE size(){return ZETypeNo;}
public:
/*//////////////////////////////////////////////
■ static 함수는 template 이 될 수 없으므로,
내포 class template 으로 해결한다.
-- 2025-10-17 22:09
//////////////////////////////////////////////*/
template<typename TViewChain> class ZtCIterChain
{
public:
@ -3578,6 +3587,183 @@ namespace ZNsMain
template /*########################################################*/
<
typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain
>
class ZtCObjtChain : public TTypeNextChain //////////////////////////
{
public :
typedef TTypeNow TypeData ;
typedef ZtCObjtChain TypeChainNow ;
typedef TTypeNextChain TypeChainNext ;
/************************************************************/
typedef typename TypeChainNext::TypeData TypeNext ;
/************************************************************/
typedef const TypeData TypeDataC ;
/************************************************************/
enum{ZETypeNo = TypeChainNext::ZETypeNo+1};
enum{ZEBoolNext = 1 };
public :
static ZTypIntE Size (){return ZETypeNo;}
static ZTypIntE size (){return ZETypeNo;}
static ZTypIntE GetNo(){return ZETypeNo;}
private:
TypeData mo_TypeVar;
public :
ZtCObjtChain() : mo_TypeVar(TTypeVar){}
public :
TypeData & GetData() {return mo_TypeVar;}
TypeDataC& GetData() const{return mo_TypeVar;}
public :
template<typename TViewChain> void IterHead(TViewChain AO_CView)
{
ZtCTypeData<TViewChain>::
GetObjRef(AO_CView).OnMeetData(*this);
if(TypeChainNow::ZEBoolNext>0)
{
static_cast<TypeChainNext&>(*this).IterHead(AO_CView);
}/*
if(TypeChainNow::ZEBoolNext>0)*/
}/*
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)*/
ZtCTypeData<TViewChain>::
GetObjRef(AO_CView).OnMeetData(*this);
}/*
template<typename TViewChain> void IterTail(TViewChain AO_CView)*/
template<typename TViewChain, typename TTypeHelp>
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).
IterHead( 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)*/
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
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:
};/*
template /*##########################################################
<
typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain
>
class ZtCObjtChain : public TTypeNextChain ////////////////////////*/
template /*########################################################*/
<
typename TTypeNow, TTypeNow TTypeVar
>
class ZtCObjtChain<TTypeNow, TTypeVar, ZCEmpty> /////////////////////
{
public :
typedef ZtCObjtChain<TTypeNow, TTypeVar, ZCEmpty> ZCObjtChain;
public :
typedef TTypeNow TypeData ;
typedef ZCObjtChain TypeChainNow ;
typedef ZCObjtChain TypeChainNext ;
/************************************************************/
typedef ZCEmpty TypeNext ;
/************************************************************/
typedef const TypeData TypeDataC ;
/************************************************************/
enum{ZETypeNo = 1 };
enum{ZEBoolNext = 0 };
public :
static ZTypIntE Size (){return ZETypeNo;}
static ZTypIntE size (){return ZETypeNo;}
static ZTypIntE GetNo(){return ZETypeNo;}
private:
TypeData mo_TypeVar;
public :
ZtCObjtChain() : mo_TypeVar(TTypeVar){}
public :
TypeData & GetData() {return mo_TypeVar;}
TypeDataC& GetData() const{return mo_TypeVar;}
public :
template<typename TViewChain> void IterHead(TViewChain AO_CView)
{
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)*/
template<typename TViewChain, typename TTypeHelp>
void IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
{
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
ZtCTypeData<TViewChain>::GetObjRef(AO_CView).
OnMeetData(*this, ZCCheckRef::PassData(AO_TypeHelp));
}
template<typename TViewChain, typename TTypeHelp>
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
{
typedef ZNsMain::ZtCCheckRef<TTypeHelp> ZCCheckRef;
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:
};/*
template /*##########################################################
<
typename TTypeNow, TTypeNow TTypeVar
>
class ZtCObjtChain<TTypeNow, TTypeVar, ZCEmpty> ///////////////////*/
namespace ZNsTmplChain
{