程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> c++ 泛型編程 之 自動生成代碼

c++ 泛型編程 之 自動生成代碼

編輯:關於C++

 

關於 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)
templateclass Unit>class GenScatterHierarchy;

templateclass Unit>
class GenScatterHierarchy,Unit>//如果第一個型別是TypeList,就遞歸產生GenScatterHierarchy
	:public GenScatterHierarchy//和GenScatterHierarchy,並繼承二者。
	,public GenScatterHierarchy
{
public:
	typedef Typelist TList;
	typedef GenScatterHierarchy LeftBase;
	typedef GenScatterHierarchy RightBase;
};

templateclass Unit>//如果第一個型別是個單一型別(ActomicType,相對於Typelist
class GenScatterHierarchy : public Unit// GenScatterHeierarchy便把該型別傳遞給Unit,然後繼承Unit
{
public:
	typedef Unit LeftBase;
};
template class Unit>
class GenScatterHierarchy//空類
{

};

//2. 產生線性繼承體系。
//1. 要求這個Unit有兩個引數
//2. 要求Unit繼承於Unit的第二個引數Base,這樣GenLinearHierarchy才能生成串狀繼承結構
template<
	class TList,
	templateclass Unit,
	class Root = EmptyType
    >class GenLinearHierarchy;//聲明

templateclass Unit,class Root>
class GenLinearHierarchy,Unit,Root>
	: public Unit >
{

};
templateclass Unit,class Root>
class GenLinearHierarchy,Unit,Root>
	:public Unit
{

};

//GenScatterHierarchy的訪問輔助類
templateclass Unit>
Unit&FieldHelper(GenScatterHierarchy&obj,Int2Type<0>)
{
	GenScatterHierarchy&leftBase = obj;
	return leftBase;
}
templateclass Unit>
Unit::Result>& FieldHelper(GenScatterHierarchy&obj,Int2Type)
{
	GenScatterHierarchy& rightBase = obj;
	return FieldHelper(rightBase,Int2Type());
}
templateclass Unit>
Unit::Result>&Field(GenScatterHierarchy&obj)
{
	return FieldHelper(obj,Int2Type());
}

#endif

 

 

template
struct Holder
{
	T mValue;
}; 
void hierarchygenerators_Test()
{
	//GenScatterHierarchy
	typedef GenScatterHierarchy MyTestClass;
	MyTestClass obj;
	Field<0>(obj).mValue = 'a';
	int i = Field<1>(obj).mValue;
	typedef TYPELIST_2(int,int) f;
	//GenLinearHierarchy 
}


 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved