首先说一下,对于上一篇的原理个人觉得。。。。。反正就是重点不突出吧!对于上一篇的不足,我会尽量在后面补全!
现在开始今天的话题吧
今天讲的就是代码生成器的第二点:.使用模版,动态替换
首先,我们需要设计一个模版解析的规则,目前我设计的规则是这样的
//替换规则
//_time_ 注:系统时间
//_TableName_ 注:替换为表的名称
//_ModelName_ 注:替换为模型名称
//_PID_ 主键
//_columnName_ 注:替换为当前的列的名称
//_i_ 注:替换为当前的列的序号
//<#foreach[parm]case格式#> 注:遍历 parm:遍历的对象,主要有table(表不带主键),table0(表带主键)
//case格式:case[Type1,Type2,...]:[replace1,replace2,...](x) 注:替换的格式(Type若为0则不分类型) (x为列的分割符,一般为符号如:,;:,若换行则为n,T为缩进,p为空格)
//<#PIDcase[Type1,Type2,...]:[replace1,replace2,...]#> 注:主键类型需要判断
//
不知道大家能不能理解,我大致说明一下,首先,我根据数据库底层的特点,设计了三个主要字段,分别是: 表的名称 , Model 的名称以及 主键 。
这三个是容易在代码中单独出现的,而下面的当前列的名称则只会在循环解析的时候出现。
下面说一说我设计的两个函数,
一个是foreach循环主要用于对表的列作循环,同时直接受两个参数,一个代表不带主键循环,一个带主键循环
还有一个是case函数,主要用于对不同类型的字段做不同的替换处理
至于下面的PIDcase。。。大家可以认为是多余的,主要是为了防止主键不是int类型时设计的。。。
跟上面的case是一样的
然后剩下的就是解析我自己设计的模版函数方法实现了,代码我就不贴了,可以到我的开源项目中去下载,地址:点击打开链接
里面有详细的解析和代码注释,欢迎交流,可能我的设计缺陷重重,欢迎指正!
然后就是模版的写法了,我这里用的是我上一个项目的代码做的模版(上个项目在苹果系统下面开发的,所以见谅)
模版的写法可以自己定义,不一定需要使用我们提供的,而且其中应该会有错误的!呵呵(不能做伸手党啊)!欢迎大家提供更加优质的模版
贴一个模版写法的例子:
//
// _ModelName_Model.h
//
// Created by 桂皮 on _time_.
//
//
#ifndef __ModelName_Model_h
#define __ModelName_Model_h
class _ModelName_
{
public:
<#foreach[table0]case[INTEGER,REAL,TEXT]:[int _columnName_;float _columnName_;std::string _columnName_](;nT)#>;
};
#endif
上次发出去才发现,模版里面的名字没有改。。。。。
最后,希望有更多的人来一起修改我们的模版
模版所在项目的文件夹CodeBuilder\CodeBuilder\bin\Debug\TempFile
下一篇我应该会讲文件的写入操作,那都是皮毛,这篇才是我的核心。。。。。