commit 2025-10-18 01:55 ZtCObjtChain after ZtCObjtChain => ZtCObjtChainEx ZCppMain/ZMainHead.H
This commit is contained in:
@ -3591,6 +3591,198 @@ namespace ZNsMain
|
||||
|
||||
■ class ZtCObjtChain<>
|
||||
|
||||
각 객체에 어떻게 쉽게 접근하는지가 관건이다. -- 2025-10-18 01:41
|
||||
|
||||
///////////////////////////////////////////////////////////////////*/
|
||||
|
||||
template /*########################################################*/
|
||||
<
|
||||
typename TTypeNow, typename TTypeNextChain
|
||||
>
|
||||
class ZtCObjtChain : public TTypeNextChain //////////////////////////
|
||||
{
|
||||
public :
|
||||
typedef TTypeNow TypeData ;
|
||||
typedef ZtCObjtChain TypeChainNow ;
|
||||
typedef TTypeNextChain TypeChainNext ;
|
||||
/************************************************************/
|
||||
typedef const TypeChainNow TypeChainNowC ;
|
||||
typedef const TypeChainNext TypeChainNextC;
|
||||
/************************************************************/
|
||||
typedef const TypeData TypeDataC ;
|
||||
/************************************************************/
|
||||
typedef typename TypeChainNext::TypeData TypeNext ;
|
||||
/************************************************************/
|
||||
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(){}
|
||||
public :
|
||||
TypeData & GetData() {return mo_TypeVar;}
|
||||
TypeDataC& GetData() const{return mo_TypeVar;}
|
||||
/************************************************************/
|
||||
TypeChainNext & GetChainNext()
|
||||
{ return static_cast<TypeChainNext&>(*this); }
|
||||
TypeChainNextC& GetChainNext() const
|
||||
{ return static_cast<TypeChainNext&>(*this); }
|
||||
/************************************************************/
|
||||
|
||||
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, typename TTypeNextChain
|
||||
>
|
||||
class ZtCObjtChain : public TTypeNextChain ////////////////////////*/
|
||||
|
||||
|
||||
template /*########################################################*/
|
||||
< typename TTypeNow >
|
||||
class ZtCObjtChain<TTypeNow, ZCEmpty> ///////////////////////////////
|
||||
{
|
||||
public :
|
||||
typedef ZtCObjtChain<TTypeNow, ZCEmpty> ZCObjtChain;
|
||||
public :
|
||||
typedef TTypeNow TypeData ;
|
||||
typedef ZCObjtChain TypeChainNow ;
|
||||
typedef ZCObjtChain TypeChainNext ;
|
||||
/************************************************************/
|
||||
typedef ZCEmpty TypeNext ;
|
||||
/************************************************************/
|
||||
typedef const TypeData TypeDataC ;
|
||||
/************************************************************/
|
||||
typedef const TypeChainNow TypeChainNowC ;
|
||||
typedef const TypeChainNow TypeChainNextC;
|
||||
/************************************************************/
|
||||
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(){}
|
||||
public :
|
||||
TypeData & GetData() {return mo_TypeVar;}
|
||||
TypeDataC& GetData() const{return mo_TypeVar;}
|
||||
/************************************************************/
|
||||
TypeChainNext & GetChainNext() { return (*this); }
|
||||
TypeChainNextC& GetChainNext() const{ return (*this); }
|
||||
/************************************************************/
|
||||
|
||||
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 >
|
||||
class ZtCObjtChain<TTypeNow, ZCEmpty> /////////////////////////////*/
|
||||
|
||||
|
||||
|
||||
/*///////////////////////////////////////////////////////////////////
|
||||
|
||||
■ class ZtCObjtChainEx<>
|
||||
|
||||
자료형 TTypeNow 에 대하여, 기본값 TTypeVar 으로 자동 초기화하려는
|
||||
목적으로 만들었으나, 기본 자료형 즉 int, long, char 에 대해서만 동
|
||||
작하고 class 에서는 동작하지 않는다. 리눅스에서는 double 형에 대해
|
||||
@ -3602,11 +3794,11 @@ namespace ZNsMain
|
||||
<
|
||||
typename TTypeNow, TTypeNow TTypeVar, typename TTypeNextChain
|
||||
>
|
||||
class ZtCObjtChain : public TTypeNextChain //////////////////////////
|
||||
class ZtCObjtChainEx : public TTypeNextChain ////////////////////////
|
||||
{
|
||||
public :
|
||||
typedef TTypeNow TypeData ;
|
||||
typedef ZtCObjtChain TypeChainNow ;
|
||||
typedef ZtCObjtChainEx TypeChainNow ;
|
||||
typedef TTypeNextChain TypeChainNext ;
|
||||
/************************************************************/
|
||||
typedef typename TypeChainNext::TypeData TypeNext ;
|
||||
@ -3622,7 +3814,7 @@ namespace ZNsMain
|
||||
private:
|
||||
TypeData mo_TypeVar;
|
||||
public :
|
||||
ZtCObjtChain() : mo_TypeVar(TTypeVar){}
|
||||
ZtCObjtChainEx() : mo_TypeVar(TTypeVar){}
|
||||
public :
|
||||
TypeData & GetData() {return mo_TypeVar;}
|
||||
TypeDataC& GetData() const{return mo_TypeVar;}
|
||||
@ -3689,24 +3881,23 @@ namespace ZNsMain
|
||||
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 ////////////////////////*/
|
||||
class ZtCObjtChainEx : public TTypeNextChain //////////////////////*/
|
||||
|
||||
|
||||
template /*########################################################*/
|
||||
<
|
||||
typename TTypeNow, TTypeNow TTypeVar
|
||||
>
|
||||
class ZtCObjtChain<TTypeNow, TTypeVar, ZCEmpty> /////////////////////
|
||||
class ZtCObjtChainEx<TTypeNow, TTypeVar, ZCEmpty> ///////////////////
|
||||
{
|
||||
public :
|
||||
typedef ZtCObjtChain<TTypeNow, TTypeVar, ZCEmpty> ZCObjtChain;
|
||||
typedef ZtCObjtChainEx<TTypeNow, TTypeVar, ZCEmpty> ZCObjtChain;
|
||||
public :
|
||||
typedef TTypeNow TypeData ;
|
||||
typedef ZCObjtChain TypeChainNow ;
|
||||
@ -3725,7 +3916,7 @@ namespace ZNsMain
|
||||
private:
|
||||
TypeData mo_TypeVar;
|
||||
public :
|
||||
ZtCObjtChain() : mo_TypeVar(TTypeVar){}
|
||||
ZtCObjtChainEx() : mo_TypeVar(TTypeVar){}
|
||||
public :
|
||||
TypeData & GetData() {return mo_TypeVar;}
|
||||
TypeDataC& GetData() const{return mo_TypeVar;}
|
||||
@ -3763,15 +3954,13 @@ namespace ZNsMain
|
||||
template<typename TViewChain, typename TTypeHelp>
|
||||
void IterTail(TViewChain AO_CView, TTypeHelp AO_TypeHelp)
|
||||
*/
|
||||
|
||||
|
||||
public:
|
||||
};/*
|
||||
template /*##########################################################
|
||||
<
|
||||
typename TTypeNow, TTypeNow TTypeVar
|
||||
>
|
||||
class ZtCObjtChain<TTypeNow, TTypeVar, ZCEmpty> ///////////////////*/
|
||||
class ZtCObjtChainEx<TTypeNow, TTypeVar, ZCEmpty> /////////////////*/
|
||||
|
||||
|
||||
|
||||
|
@ -108,17 +108,17 @@ namespace ZNsMain
|
||||
cout<<myintvar2.MO_TypeVar<<endl;
|
||||
|
||||
|
||||
typedef ZtCObjtChain
|
||||
typedef ZtCObjtChainEx
|
||||
<
|
||||
char , 'a' , ZtCObjtChain<
|
||||
//double, 10.2 , ZtCObjtChain< // error in linux
|
||||
//string, string("123") , ZtCObjtChain< // error
|
||||
long , 10 , ZtCObjtChain<
|
||||
char , 'a' , ZtCObjtChainEx<
|
||||
//double, 10.2 , ZtCObjtChainEx< // error in linux
|
||||
//string, string("123") , ZtCObjtChainEx< // error
|
||||
long , 10 , ZtCObjtChainEx<
|
||||
int , 19 ,
|
||||
ZCEmpty > >
|
||||
> ZtCObjtChain; ZCTypeView VO_ZCTypeView;
|
||||
> ZtCObjtChainEx; ZCTypeView VO_ZCTypeView;
|
||||
|
||||
ZtCObjtChain VO_ZtCObjtChain; int VI_CallNo = 0;
|
||||
ZtCObjtChainEx VO_ZtCObjtChain; int VI_CallNo = 0;
|
||||
|
||||
cout<<"# VO_ZtCObjtChain.size()="<<VO_ZtCObjtChain.size()<<endl;
|
||||
|
||||
@ -147,10 +147,11 @@ namespace ZNsMain
|
||||
|
||||
ZftIterTypeChainTail<ZCTypeChain, ZCTypeView&>(VO_ZCTypeView);
|
||||
|
||||
cout<<"************************************"<<endl;
|
||||
cout<<"@** call start : ZCTypeView(rhs) **********@"<<endl;
|
||||
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterHead(VO_ZCTypeView);
|
||||
cout<<"************************************"<<endl;
|
||||
cout<<"@******************************************@"<<endl;
|
||||
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterTail(VO_ZCTypeView);
|
||||
cout<<"@*** call close : ZCTypeView(rhs) *********@"<<endl;
|
||||
|
||||
ZftIterTypeChainHead<ZCTypeChain, ZCTypeView&, int&>
|
||||
( VO_ZCTypeView, (VI_CallNo = 0) );
|
||||
@ -159,10 +160,10 @@ namespace ZNsMain
|
||||
( VO_ZCTypeView, (VI_CallNo = 0) );
|
||||
|
||||
cout<<"************************************"<<endl;
|
||||
ZCTypeChain::ZtCIterChain<ZCTypeView>::
|
||||
ZCTypeChain::ZtCIterChain<ZCTypeView&>::
|
||||
IterHead(VO_ZCTypeView, ZftMCP(VI_CallNo=0));
|
||||
cout<<"************************************"<<endl;
|
||||
ZCTypeChain::ZtCIterChain<ZCTypeView>::
|
||||
ZCTypeChain::ZtCIterChain<ZCTypeView&>::
|
||||
IterTail(VO_ZCTypeView, ZftMCP(VI_CallNo=0));
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user