昨晚做了一个能根据头文件自动生成类成员定义的脚本..

昨晚做了一个能根据头文件自动生成类成员定义的脚本..

#!/usr/bin/perl -w

#

use strict;

my $include = "include/";
my $srcdir  = "src/";
foreach (@ARGV)
{
    open FILE_H, "<$include$_";
    (my $fileheader) = split /\./, $_;
    open FILE_CPP, ">>$srcdir$fileheader.cpp";

    my $inclass = 0;
    my $className;
    while (my $line = <FILE_H>)
    {
        if ($line =~ m/class (\w+)$/ || $line =~ m/class (\w+) :/)
        {
            $inclass = 1;
            $className = $1;
        }

        $inclass = 0 if $line =~ /\}\;/;
        if ($inclass)
        {
            if ($line !~ /^\/\// && $line =~ /\(.*\)/ && $line !~ /$className/ && $line !~ /private/ && $line !~ /public/ && $line !~ /protected/ && $line !~ /friend/)
            {
                $line =~ s/^\s+//g;
                (my $retType, my $funName, my $tmp, my $tp) = split / /, $line;
                if ($retType eq "virtual")
                {
                    $retType = $funName;
                    $funName = $tmp;
                }elsif ($funName eq "*")
                {
                    $retType .= "*";
                    $funName  = $tmp;
                }
                my $const = "";
                $const = "const" if $line =~ /const$/;
                $line =~ m/.*?(\(.*\))/;
                my $parameter = $1;
                $parameter =~ s#( = 0)#/\*$1\*/#g;

                $parameter =~ s#( = NULL)#/\*$1\*/#g;

                #$retType =~ tr/\t //d;

                print FILE_CPP "$retType " . "$className" . "::" . "$funName" . " $parameter" . " $const" . "\n";
                print FILE_CPP "{\n    return ;\n}\n\n";
            }
        }
    }
}



使用方法:
./scripts  ClassHeader.h
它会自动查找  ./include 下的ClassHeader.h 文件..并将相应的cpp 生成到 ./src中.



QUOTE:
原帖由 cookis 于 2007-12-18 09:20 发表
#!/usr/bin/perl -w

#

use strict;

my $include = "include/";
my $srcdir  = "src/";
foreach (@ARGV)
{
    open FILE_H, ">$srcdir$fileheader.cpp";

    my $inclass = 0;
    my $classN ...

好东西啊,生成的函数实现是空的把
当然是空的..如果把定义都给你实现了...我就成火星人了..
呵呵