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