自动生成代码
来源:互联网 发布:python 网页自动签到 编辑:程序博客网 时间:2024/06/07 13:24
loki 提供一个极具威力的工具,可轻易将typelist里的每一个型别套用于一个由用户提供的基本template身上
这么一来将typelist 内的型别分发至客端代码的一些不便过程就被完全封装在loki程序库中,使用者只需自行定义一个单一template
template <class TList,template <class>class Unit>
class GenScatterHierarchy;
template <class T1,class T2,template <class >class Unit>
class GenScatterHierarchy<TYPELIST_2(T1,T2),Unit>;public GenScatterHierarchy<T1,Unit>,public GenScatterHierarchy<T2,Unit>
{
};
template <class AtomicType,template <class>class Unit>
class GenScatterHierarchy:public Unit<ActomicType>
{
};
template <template<class>class Unit>
class GenScatterHierarchy<NullType,Unit>
{
};
最终一一具现体
template <class T>
struct Holder
{
T value_;
}
typedef GenScatterHierarchy<TYPELIST_3(int,string,Widget),Holder>WidgetInfo;
根据型别取成员变量
template <class T,class TList,template <class>class Unit>
Unit <T>&Field (GenScatterHierarchy<TList,Unit>&obj)
{
return obj;
},
自动继承,注意符号相同会隐藏,typelist中不能有重复型别时
解决方式
我们需要一个“以索引选择GenSCatterHierarchy”实体栏位的方法,引导继承的方式
template <class TList,tempate<class>class Unit>
Unit<TList::Head>& FieldHelper(
GenSatterHierarchy<TList,Unit>&obj,Int2Type<0>)
{
GenScatterHierarchy<TList::Head,Unit>& leftBase= obj;
return leftBase;
}
template <int i ,class TList,template<class>class Unit>
Unit<TypeAt<TList,index>::Result>&
FieldHelper(
GenScatterHierarchy<TList,Unit>& obj,
Int2Type<i>)
{
GenScatterHierarchy<TList::Tail,Unit>& rightBase=obj;
return FieldHelper(rightBase,Int2Type<i-1>());
}
template <int i ,class TList,Template <class>class Unit>
Unit <TypeAt<TList,index>::Result>&
Field(GenScatterHierarchy<TList,Unit>&obj)
{
return FieldHeler(obj,Int2Type<i>());
}
如此可以通过索引
WidgetInfo obj;
int x= Field<0>(obj).value_;
int y= Field<1>(obj).value_;
tuples
template <class T>
struct Holder
{
T value_
}
typedef GenScatterHierarchy<
TYPELIST_3(int,int,int),Holder>
Point3D;
Loki定义的Tuple temPplate class 可以直接访问&value,不需要从对象间接访问value
example
typedef Tuple<TYPELIST_3(int,int,int)> Point3D;
Point3D pt;
Field<0>(pt)=0;
Field<1>(pt)=100;
Field<2>(pt)=300;
获取值
Tuple<TYPELIST_3(int,int,int)>
GetWindowPlacement(Window&);
单线继承方式
template
<
calss TList;
template <class AtmoicType,class Base>class Uint,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_1(T),Unit,Root>
:public Unit<T,Root>
{
};
template<class T,class Base>
class EventHandle:public Base
{
public:
virtual void onEvent(T &obj,int eventId);
}
typedef GenLinearHierarchy
<
TYPELIST_3(Window,Button,ScrollBar),
EventHandler
>
MyEventHanldr;
Over!
- 代码自动生成.
- 自动生成代码
- 代码自动生成软件
- ALV自动生成代码
- CodeSmith自动生成代码
- java代码自动生成
- 代码自动生成工具
- 自动代码生成
- MBG自动代码生成
- 自动生成代码实用工具
- matlab自动代码生成
- 自动生成代码实用工具
- 代码自动生成
- hand代码自动生成
- yii 自动生成代码
- 代码自动生成
- thinkphp 代码自动生成
- MyBatis代码自动生成
- My97 DatePicker使用之自定义事件
- chrome浏览器 Adobe Flash 版本太旧 无法播放视频解决办法
- jQuery 中的 Ajax
- Objective-C编码规范
- 解决ZendStudio打开utf-8格式的php文件乱码
- 自动生成代码
- Spring8:一些常用的Spring Bean扩展接口
- Aix系统vi模式下常用命令
- css基础学习----常用文本属性
- PetaLinux安装教程,基于Ubuntu
- 高性能的关键:Spring MVC的异步模式
- Android 与 SwitchButton亲密约会《-》
- Block头部解析
- 【Spring】Bean的生命周期