初始化C++类变量的简单脚本

来源:互联网 发布:人工智能:伏羲觉醒 编辑:程序博客网 时间:2024/06/10 01:35

程序员是很懒的。我们都知道,成员变量要初始化,要不就会出现很蛋疼的问题。但是一个有50个变量的类,去一个个写初始化式很傻,又不能跟c一样直接memset(POD可以)。

想把初始化这部分自动化,在网上找半天找不到相应的脚本(如果谁有希望能告诉我没,谢谢:)),于是只好自己写了个简单的,顺便分享下:


#!/bin/sh#useage#./variables_initializate.sh path_to_your_header_file [op]#op 1,init the variables in the class initialization function.#otherwise,treat as the default modetype="bool|int|long|float|double|char|[[:alnum:]]+\*"# $2 is empty or not equal 1if [[ -z $2 ]] || [ $2 -ne 1 ]; thencat $1 \| grep -E "^[[:space:]]*($type)[[:space:]]*[a-zA-Z0-9]+;" \| sed "s/^[[:space:]]*bool[[:space:]]\{1,\}\([[:alnum:]]\{1,\}\);/\1 = false;/" \| sed "s/^[[:space:]]*int[[:space:]]\{1,\}\([[:alnum:]]\{1,\}\);/\1 = 0;/" \| sed "s/^[[:space:]]*long[[:space:]]\{1,\}\([[:alnum:]]\{1,\}\);/\1 = 0;/" \| sed "s/^[[:space:]]*float[[:space:]]\{1,\}\([[:alnum:]]\{1,\}\);/\1 = 0.0f;/" \| sed "s/^[[:space:]]*double[[:space:]]\{1,\}\([[:alnum:]]\{1,\}\);/\1 = 0.0f;/" \| sed "s/^[[:space:]]*char[[:space:]]\{1,\}\([[:alnum:]]\{1,\}\);/\1 = 0;/" \| sed "s/^[[:space:]]*[[:alnum:]]\{1,\}[[:space:]]\{0,\}\*[[:space:]]\{0,\}\([[:alnum:]]\{1,\}\);/\1 = NULL;/"elsecat $1 \| grep -E "^[[:space:]]*($type)[[:space:]]*[a-zA-Z0-9]+;" \| sed "s/^[[:space:]]*bool[[:space:]]\{1,\}\([[:alnum:]]\{1,\}\);/\1(false),/" \| sed "s/^[[:space:]]*int[[:space:]]\{1,\}\([[:alnum:]]\{1,\}\);/\1(0),/" \| sed "s/^[[:space:]]*long[[:space:]]\{1,\}\([[:alnum:]]\{1,\}\);/\1(0),/" \| sed "s/^[[:space:]]*float[[:space:]]\{1,\}\([[:alnum:]]\{1,\}\);/\1(0.0f),/" \| sed "s/^[[:space:]]*double[[:space:]]\{1,\}\([[:alnum:]]\{1,\}\);/\1(0.0f),/" \| sed "s/^[[:space:]]*char[[:space:]]\{1,\}\([[:alnum:]]\{1,\}\);/\1(0),/" \| sed "s/^[[:space:]]*[[:alnum:]]\{1,\}[[:space:]]\{0,\}\*[[:space:]]\{0,\}\([[:alnum:]]\{1,\}\);/\1(NULL),/"fi

用法就是 
./variables_initializate.sh 头文件路径 可选参数1

如果加了参数,那么就生成类构造函数里头初始化的形式

如果没加,那么默认就是直接初始化的方式