commit 2025-10-18 00:09 add ZtCObjtChain in ZCppMain/ZMainHead.H
This commit is contained in:
@ -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
|
||||
{
|
||||
|
||||
|
Reference in New Issue
Block a user