用Perl来帮助生成C++版“自动属性”
来源:互联网 发布:python 写入变量 编辑:程序博客网 时间:2024/05/20 23:56
用VS来使用C#的应该知道有个自动属性,类似于
public int MyProperty { get; set; }他帮你自动生成get/set方法,还帮你把这些方法绑定到该属性上,很方便的说,但是C++的IDE里没有这个功能的,而且我们C++需要写
_declspec(property(put=setJobID, get=getJobID)) unsigned long jobID; void setJobID(unsigned long inJobID); unsigned long getJobID() const;这么多代码来做这些事情,故我用perl写了个简单的脚本,根据变量类型、变量名字和变量读写属性帮我自动生成这些。
前提:
1.电脑上有安装perl,且能正常使用。
2.提供一个field.txt,里面的每行都包含 变量类型,变量名字,变量读写属性
例如string,version,rw
unsigned long,length,r
YourStructName,structName,w
简单知识点:
1.文件读写
perl文件读需要用到IO::File 或者输入重定向,这里用的模块是IO::File.
my $f = new IO::File("< field.txt");# the file contains type,name,rw/r/wif(!$f){ print("$!\n"); exit(1);}输出这块用的是输出重定向,可以参考
# 创建STDOUT句柄的一个副本,之后可以关闭STDOUTopen my $oldout, '>&', \*STDOUT or die "Cannot dup STDOUT: $!";# 重新将STDOUT打开为文件output.txt的句柄# 在打开文件之前,Perl会将原来保存在STDOUT中的句柄关闭open STDOUT, '>', 'output.txt' or die "Cannot reopen STDOUT: $!";# 接下来的默认输出将会写入到output.txtprint "Hello, World!\n";# 从原有的STDOUT副本中恢复默认的STDOUTopen STDOUT, '>&', $oldout or die "Cannot dup \$oldout: $!";
2.字符串包含
用正则表达式就可以$a=~/w/ 表示$a包含“w”。
废话不多说,上全部代码:
#!/usr/bin/perluse strict;use warnings;use IO::File;my $f = new IO::File("< field.txt");# the file contains type,name,rw/r/wif(!$f){ print("$!\n"); exit(1);}#stdout -> fileopen my $oldout, '>&', \*STDOUT or die "Cannot dup STDOUT: $!";open STDOUT, '>', 'output.txt' or die "Cannot reopen STDOUT: $!";my $line;my @array;while($line=<$f>){ chomp($line); $array[@array]=[split(/,/,$line,3)];}my $i;#for $i ( 0 .. $#array ) #{ #print $array[$i][0]." ".$array[$i][1]." ".$array[$i][2]."\n";#}# _declspec(property(put=setName,get=getname)) # type name;for $i (0..$#array){ my $result = "_declspec(property(";my $type = $array[$i][0];my $name = $array[$i][1];my $rw = $array[$i][2];if ($rw =~ /w/){$result = $result."put=set".$name.",";}if($rw =~ /r/){$result = $result."get=get".$name."))";}$result = $result."\n ".$type." ".$name.";\n";print $result;}# void setProgress(unsigned long inPercentDone);#unsigned char getProgress() const;for $i (0..$#array){ my $type = $array[$i][0];my $name = $array[$i][1];my $rw = $array[$i][2];my $result ="";if ($rw =~ /w/){#w$result = $result."void set".$name."(".$type." in".$name.");\n";}if($rw =~ /r/){#r$result = $result.$type." get".$name."() const;\n";}print $result;}#file -> stdoutopen STDOUT, '>&', $oldout or die "Cannot dup \$oldout: $!";my $status = system( "notepad.exe output.txt" );if ($status != 0){print "Failed to open output.txt";exit -1;} else {print "Success to open output.txt,please check it !";}exit 0;
输出的文件是output.txt,里面上半部分是绑定,下半部分是 get/set函数声明。
全部代码见于:https://github.com/lcl-data/GeneratedAutoPropertyInCplusplus
LCL_data原创于CSDN blog,转载请注明。
LCL_data原创于CSDN blog,转载请注明。
- 用Perl来帮助生成C++版“自动属性”
- webAPI 自动生成帮助文档
- webAPI 自动生成帮助文档
- 用Perl来分析并生成中文Excel文件
- 帮助你自动生成浏览器特有CSS3属性的Javascript类库 - CSSFx
- 自动生成.NET项目帮助生成
- 学习,自动生成属性
- Web Api 自动生成帮助文档
- WebAPI——自动生成帮助文档
- webApi——自动生成帮助文档
- 自动生成java电子书的perl程序
- perl客户需求设置自动生成
- 用@Autowired 注解来装配属性、自动装配
- 用javadoc的命令生成过帮助文档,但是包注释怎么来的呢?
- VS2008自动生成属性代码
- VS2005 自动生成属性(转)
- perl python c语言视频教程自动发货
- PHP 自动生成帮助文档工具1.0Beta版【代码维护神器】
- SPL之SAS Protocol Layer (SPL)-SAS协议层
- PLSQL总结——23.查看锁,解锁
- Android开发之路
- PHP iconv()函数转字符编码的问题
- 访问iPhone本地的数据库 sqlite3
- 用Perl来帮助生成C++版“自动属性”
- 文章的长短与女人的裙子
- CROSS APPLY和 OUTER APPLY 区别详解
- C# Winform多窗口
- 关于录播教室的几点担心
- LTE from theory to practice
- encodeURIComponent编码后java后台的解码
- C++学习笔记------入门基础
- 推荐一个Android平板高清游戏果冻帝国防御战