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;}
|
static ZTypIntE size(){return ZETypeNo;}
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
/*//////////////////////////////////////////////
|
||||||
|
|
||||||
|
■ static 함수는 template 이 될 수 없으므로,
|
||||||
|
내포 class template 으로 해결한다.
|
||||||
|
|
||||||
|
-- 2025-10-17 22:09
|
||||||
|
|
||||||
|
//////////////////////////////////////////////*/
|
||||||
|
|
||||||
template<typename TViewChain> class ZtCIterChain
|
template<typename TViewChain> class ZtCIterChain
|
||||||
{
|
{
|
||||||
public:
|
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
|
namespace ZNsTmplChain
|
||||||
{
|
{
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user