commit 2025-10-18 01:55 ZtCObjtChain after ZtCObjtChain => ZtCObjtChainEx ZCppMain/ZMainHead.H

This commit is contained in:
2025-10-18 01:55:54 +09:00
parent 1d3ee05571
commit 342dc34096
2 changed files with 212 additions and 22 deletions

View File

@ -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> /////////////////*/

View File

@ -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));