XCodeで、C++のメンバ関数宣言を支援するマクロ
XCodeでC++のクラスを実装する時に、ヘッダファイル(*.h)のメンバ関数の宣言から、実装ファイル(*.cpp)のメンバ関数定義用の宣言を、生成するマクロを作ってみた。(逆も可能)
いちいちコピペして「クラス名::」をつけたり消したりするのが面倒なので。
例えば、このようなヘッダファイルのメンバ関数の宣言から
class MyObject { public: MyObject(int arg1); virtual void func1(int arg1); };
このようなメンバ関数定義用の宣言を生成する。(逆も可能)
MyObject::MyObject(int arg1) { } void MyObject::func1(int arg1) { //virtual }
インストール
使い方
補足
スクリプト
convertCppMethodDecl.rb
#!/usr/bin/ruby -Ku filePath='%%%{PBXFilePath}%%%' selIndex=%%%{PBXSelectionStart}%%% allText=<<__EOS__ %%%{PBXAllText}%%% __EOS__ selText=<<__EOS__ %%%{PBXSelectedText}%%% __EOS__ found=false if filePath =~ /\.h[a-z]*$/ # when header files (*.h / *.hpp) className='' allText[0...selIndex].each_line do |line| className=$1 if line.chomp =~ /\s*(?:class|struct)\s+([_A-Za-z0-9]+)/ end selText.each_line do |line| line.chomp! if line =~ /\s*(?:(virtual|static)\s+)?(?:(.+)\s+)?(~?[_A-Za-z0-9]+\(.+)\s*;\s*$/ print ($2.nil? ? '' : $2+' '), className, '::', $3, " {", ($1.nil? ? '' : ' //'+$1), "\n" found=true end end else # when implementation files (*.cpp / *.mm) selText.each_line do |line| line.chomp! if line =~ /^([_A-Za-z].+ )?~?[_A-Za-z0-9]+::(.+?)(?:\s*\{)?\s*(?:\/\/\s*(virtual|static)\s*)?$/ print "\t", ($3.nil? ? '' : $3+' '), ($1.nil? ? '' : $1), $2, ";\n" found=true end end end print "[Not found]" unless found