C++のクラスの .h と.cpp を自動生成するスクリプト

C++でクラスを大量に作るときに,同じようなファイルばっかり何個も作るのがめんどくさかったので,自動生成するスクリプトを作ってみた.要 Ruby.
実行手順は,

./ClassFileGenerator.rb author ClassName (BaseClassName)

プログラムの作者と,クラス名を引数で渡すと, .h と .cpp が自動的に生成される.(で,gvim -o で開く.)
クラス名を続けて2つ書くと,2つ目のクラスを基底クラスとしてクラスが作られる.

ClassFileGenerator.rb

#!/usr/bin/ruby
require 'date'
require 'erb'

if ARGV.length < 2
	print "usage #{$0} author classname [baseclassname]\n"
	exit -1
end

author=ARGV[0]
classname=ARGV[1]
baseclass=""
date=Date.today.to_s

if ARGV.length >= 3
	baseclass=ARGV[2]
	if !File.exist?(baseclass+".h")
		system "#{$0} #{author} #{baseclass}"
	end
end

if File.exist?(classname+".h") || File.exist?(classname+".cpp")
	print "class #{classname} already exists.\n"
	exit -1
end

h_template=ERB.new(open("H_template.erb").read)
cpp_template=ERB.new(open("CPP_template.erb").read)

open(classname+".h","w") do |f|
	f.print h_template.result(binding)
end

open(classname+".cpp","w") do |f|
	f.print cpp_template.result(binding)
end

system "gvim #{classname}.h #{classname}.cpp -O &"

これとは別に,以下の2つのテンプレートファイルが必要です.

H_template.erb

/*!
 * @file <%= classname %>.h
 * @author <%= author %>
 * @date Last Change:<%= date %>.
 */
#ifndef <%= classname.upcase %>_H__
#define <%= classname.upcase %>_H__

<% if baseclass!="" then %>
#include "<%= baseclass %>.h"
class <%= classname %>:public <%= baseclass %>{
<% else %>
class <%= classname %>{
<% end %>
	public:
		<%= classname %>();
		virtual ~<%= classname %>();
	protected:
		
	private:
		
};
#endif

CPP_template.erb

/*!
 * @file <%= classname %>.cpp
 * @author <%= author %>
 * @date Last Change:<%= date %>.
 */
#include "<%= classname %>.h"

/*!
 * @brief デフォルトコンストラクタ
 */
<%= classname %>::<%= classname %>(){

}

/*!
 * @brief デストラクタ
 */
<%= classname %>::~<%= classname %>(){

}

ERB使ってみたかっただけなんです><