HppSlice:C++ 声明与实现的分离程序

来源:互联网 发布:嵌入式软件版本说明 编辑:程序博客网 时间:2024/05/19 03:43
软件名称:HppSlice
版本:1.0
时间:2014-11-06
作者:飞天狐
功能:
实现 C++ 头文件中实现和声明的分离。有时为了快速开发,调试,常常把代码的实现和声明放在一起。
如:
class Test{
int test()
{
....
}
};
当我们调试完一个类或程序的时候,为了发布编译好的 .lib 或 .dll 还需要把实现分离出来,以便单独把头文件发放出来。
或者为了减少以后的编译时间,我们也不希望头文件包含庞大的实现文件,所以需要把实现代码分离出来。
如果用手工实现则会相当麻烦。于是我开发了该工具用来自动化上述操作。


使用方法:
1、对于每个类,如果希望分离该类里面的某些或全部方法,则需要在类声明的上一行加上标签:///@slice,在该类的结束下一行加上标签:///@~,之间不能有空行
如:(标签单独一行,标签与类的声明之间不能有空行 )
///@slice

class Test{

...

};

///@~
2、对于每个希望被分离的方法,在方法名上一行单独一行加上标签:///@sl , 之间也不能有空行
3、运行程序,输入相应的命令及参数
4、命令及参数:
  命令行/控制台 参数:
  -b {dir/filename }|dir/* 恢复指定文件或指定文件夹下的文件,可以使用通配符
  -s {dir/filename }|dir/* 分离指定文件或指定文件夹下的文件,可以使用通配符


注意事项:
1、由于没有实现格式检查功能,所以如果使用了不当的格式会导致分离失败,如果分离失败可以通过恢复指令复原
2、///@sl 适用的函数有比较严格的限制,要求格式如下才能使用 ///@sl 标签:
@[ret]@fun-name@(param)@{impl}
@:表示空格和注释的任意组合, [] 表示可选,ret 只能是一个单个的类型如:int,但不可以是复合的如:const int, 因此在使用的时候要注意,否则可能会造成源码的损害。

如果发现分离后代码有问题,可以通过 恢复命令 -b 恢复源文件


历时:2 天

总结:

一开始构思该程序的时候认为会很简单。其实不然。主要工作如下:

1、开始的想法是把所有的实现代码分离出来,但是后来考虑到用户可能并不希望分离所有的代码,因此后来就加上了标签。这样一来用户的自主权更大,解析也会相应的变简单了。

2、开始忽略了引号及注释,导致解析失败,当考虑上了引号和注释后,开发难度有了本质的提高。因为要跳过所有的注释和引号而不解析他们。本以为直接预处理掉所有的注释,但是这样做就会得不偿失了,因为好的注释是很重要的,不能也不应该被处理掉。

3、开始实现的时候没有考虑到要把解析给分离开来,直接混杂在一起,导致程序逻辑变得复杂和难以理解,bug 也因此增多。经过多次尝试,把现在定义的接口作为最终实现的接口。(曾经考虑过定义一个文件解析类,来辅助实现,但后来没有这样做,因为很难完全封装、屏蔽掉对输入文件的操作)。经过最后的修改,不仅代码量减少了,而且程序的逻辑也变得简单明了。

4、在开发的时候最好是先想好接口,把主要逻辑实现,然后再实现接口,这样就可以及早发现接口设计是否合理。如果不合理,那重构的难度也不大。当然,对于不甚了解的知识或细节,可能要事先做可行性分析,比如可以把该细节先实现了,以防到最后才发现该细节无法实现,那时候导致的重构代价将是巨大的!因此在这里就存在一个权衡的问题了,具体问题具体分析,一切都要靠情景!


源码链接


0 0
原创粉丝点击