c++ 泛型程式設計 之 自動生成程式碼
http://download.csdn.net/detail/zhuyingqingfen/8457091
關於 C++ 泛型中的 TypeList ,參考 c++ 泛型程式設計 之 TypeLists
#ifndef GENSCATTERHIERARCHY_H_
#define GENSCATTERHIERARCHY_H_
#include "typelists.h"
#include "typetraits.h"
#if defined(_MSC_VER) && _MSC_VER >= 1300
// 'class1' : base-class 'class2' is already a base-class of 'class3'
#pragma warning( disable : 4584 )
#endif // _MSC_VER
//運用Typelists 自動產生Classes
//1. 產生“散亂的繼承體系”(scattered hierarchies)
template<class TList,template<class>class Unit>class GenScatterHierarchy;
template<class T1,class T2,template<class>class Unit>
class GenScatterHierarchy<Typelist<T1,T2>,Unit>//如果第一個型別是TypeList,就遞迴產生GenScatterHierarchy<TList::Head,Unit>
:public GenScatterHierarchy<T1,Unit>//和GenScatterHierarchy<TList::Tail,Unit>,並繼承二者。
,public GenScatterHierarchy<T2,Unit>
{
public:
typedef Typelist<T1, T2> TList;
typedef GenScatterHierarchy<T1, Unit> LeftBase;
typedef GenScatterHierarchy<T2, Unit> RightBase;
};
template<class AtomicType,template<class>class Unit>//如果第一個型別是個單一型別(ActomicType,相對於Typelist
class GenScatterHierarchy : public Unit<AtomicType>// GenScatterHeierarchy便把該型別傳遞給Unit,然後繼承Unit<T>
{
public:
typedef Unit<AtomicType> LeftBase;
};
template<template<class> class Unit>
class GenScatterHierarchy<NullType,Unit>//空類
{
};
//2. 產生線性繼承體系。
//1. 要求這個Unit有兩個引數
//2. 要求Unit繼承於Unit的第二個引數Base,這樣GenLinearHierarchy才能生成串狀繼承結構
template<
class TList,
template<class AtomicType,class Base>class Unit,
class Root = EmptyType
>class GenLinearHierarchy;//宣告
template<class T1,class T2,template<class,class>class Unit,class Root>
class GenLinearHierarchy<Typelist<T1,T2>,Unit,Root>
: public Unit<T1,GenLinearHierarchy<T2,Unit,Root> >
{
};
template<class T,template<class,class>class Unit,class Root>
class GenLinearHierarchy<Typelist<T,NullType>,Unit,Root>
:public Unit<T,Root>
{
};
//GenScatterHierarchy的訪問輔助類
template<class TList,template<class>class Unit>
Unit<typename TList::Head>&FieldHelper(GenScatterHierarchy<TList, Unit>&obj,Int2Type<0>)
{
GenScatterHierarchy<typename TList::Head,Unit>&leftBase = obj;
return leftBase;
}
template<int i,class TList,template<class>class Unit>
Unit<typename TypeAt<TList,i>::Result>& FieldHelper(GenScatterHierarchy<TList,Unit>&obj,Int2Type<i>)
{
GenScatterHierarchy<typename TList::Tail,Unit>& rightBase = obj;
return FieldHelper(rightBase,Int2Type<i-1>());
}
template<int i,class TList,template<class>class Unit>
Unit<typename TypeAt<TList,i>::Result>&Field(GenScatterHierarchy<TList,Unit>&obj)
{
return FieldHelper(obj,Int2Type<i>());
}
#endif
template<class T>
struct Holder
{
T mValue;
};
void hierarchygenerators_Test()
{
//GenScatterHierarchy
typedef GenScatterHierarchy<TYPELIST_4(char,int,string,string),Holder> MyTestClass;
MyTestClass obj;
Field<0>(obj).mValue = 'a';
int i = Field<1>(obj).mValue;
typedef TYPELIST_2(int,int) f;
//GenLinearHierarchy
}
相關文章
- c++ 泛型程式設計 之 TypeListsC++泛型程式設計
- c++ 泛型 程式設計 之 Functor 設計模式C++泛型程式設計設計模式
- 泛型程式設計泛型程式設計
- C++ primer 模板與泛型程式設計C++泛型程式設計
- java 泛型程式設計Java泛型程式設計
- C++ 泛型程式設計基礎:模板通識C++泛型程式設計
- 十、GO程式設計模式 : 泛型程式設計Go程式設計設計模式泛型
- [靈性程式設計]GO的依賴注入 AND 自動生成程式碼程式設計Go依賴注入
- Java進階之 如何自動生成程式碼Java
- 物件導向程式設計和`GP`泛型程式設計物件程式設計泛型
- 泛型程式設計在非C++語言中的實現之探討 (轉)泛型程式設計C++
- 02. 程式設計核心內功心法之泛型程式設計泛型
- 泛型程式設計詳解(一)泛型程式設計
- 泛型程式設計與 OI——modint泛型程式設計
- LR.Net解放程式設計師雙手的自動生成程式碼程式設計師
- C++ STL與泛型程式設計-第一篇 (Boolan)C++泛型程式設計
- C++ 簡單實現陣列類泛型程式設計示例C++陣列泛型程式設計
- 程式碼自動生成外掛:
- MyBatis Generator自動生成程式碼MyBatis
- 小事: 自動生成Getter程式碼
- chagpt自動生成PPT程式碼GPT
- AOS 自動生成程式碼(三) Service生成
- .NET泛型程式設計簡介 (轉)泛型程式設計
- 程式設計師快樂器之JAVA程式碼生成工具程式設計師Java
- GO語言泛型程式設計實踐Go泛型程式設計
- beego 程式碼自動生成器Go
- Android JNI 程式碼自動生成Android
- Yii中gii自動生成程式碼
- 【C++ 泛型程式設計01:模板】函式模板與類别範本C++泛型程式設計函式
- 好程式設計師Java教程分享Java難點解析之泛型程式設計師Java泛型
- 在C語言中實現泛型程式設計C語言泛型程式設計
- C語言如何實現泛型程式設計?C語言泛型程式設計
- Swift使用協議加泛型程式設計(一)Swift協議泛型程式設計
- c++ 泛型 之 TypeTraintsC++泛型AI
- 利用mybatis-generator自動生成程式碼MyBatis
- 自動現代化C++程式碼C++
- QML之C++混合程式設計C++程式設計
- 如何用程式碼動態生成ABAP型別型別