掲示板一覧 - トピック一覧 EA ソースコード生成・コード生成テンプレート コード生成テンプレートに関するTIPS |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | トピック |
---|---|
tkouno | 投稿日時: 2007-1-5 18:36 |
EA Administrator 投稿: 4288 |
コード生成テンプレートに関するTIPSあるお客様のとのやり取りの中で、サポートからの回答を
わかりやすい形でまとめてくださいました。 公開についてもご快諾くださいましたので ここに公開させていただきます。 (Webでの表示用に体裁のみ多少修正しました) その1: コメント関連 1.説明記述の設定 (1)クラス図を開き、コード出力先を設定する。 対象クラスの右クリックからコンテキストメニュー[ソースコードの生成]を選択し、開かれたダイアログ上 の"パス"にパスと出力ファイル名を設定し、[保存]そして「[閉じる]ボタンをクリックする。 注)クラス毎に1ファイルで出力する場合は、クラス図上で複数クラスを選択して一括生成できるが、 複数クラスを1ファイルに実装する場合は、上記手順で出力先に同じファイルを設定する必要がある。 但し、この機能はヘッダファイル(.h)にのみ有効で、ソースファイル(.cpp)には適用されない。 (2)ファイルの説明記述の設定 対象クラスの右クリックからコンテキストメニュー[ソースコードの生成]を選択し、開かれたダイアログ上 の"インポートおよびヘッダ"(上段が.h用,下段は.cpp用)に記述し、[保存],「[閉じる]ボタンをクリックする。 注)この部分の記述はクラスのコードの最上部に出力される(.hファイルでは#ifndefなどのマクロ文の次)。 従って、以下のような記述を行う。 (1)出力ファイル全体の説明 (2)include文 * クラス図で関連が設定されたクラスのヘッダのinclude分は自動生成される。 * C++Builderなどが自動生成するはずのinlude文も記述しておいた方がよい (3)using namespace文 なお、上記(1)のように複数クラスのコードを1ファイルに出力する場合、記述が重複しないために 2番目以降の出力クラスにはこの記述をしてはいけない。 (3)クラスの説明記述の設定 対象クラスの右クリックからコンテキストメニュー[プロパティ]を選択し、開かれたダイアログ上の"ノート"に記述し、 [保存],「[閉じる]ボタンをクリックする。 注)この部分の記述は各クラスの先頭コードの直前に出力される。従って各クラス毎にクラス固有のコメントを書く。 なお出力の際には、その左端にコメント文にするための/*,*,*/などが自動挿入されるので、コメントには これらの文字を含まないようにするのがよい(これらが重複して出力されるとエラーになったりするため)。 (4)メンバの説明記述の設定 対象クラスの右クリックからコンテキストメニュー[属性]を選択し、開かれたダイアログ下部の属性一覧から1つを クリック選択してから"ノート"に記述し、[保存],「[閉じる]ボタンをクリックする。 対象クラスの右クリックからコンテキストメニュー[操作]を選択し、開かれたダイアログ下部の属性一覧から1つを クリック選択してから"ノート"に記述する。さらに”振る舞い”タブを開いて”振る舞い"欄に記述してもよい。 その後”振る舞い”タブの[保存]をクリックした後、"一般"タブに戻って、[保存],「[閉じる]をクリックする。 注)操作の"ノート"欄の記述は各メソッドの先頭コードの直前に出力され、 "振る舞い"欄の記述は各メソッドのコード内"{"の次の行に出力される。 |
tkouno | 投稿日時: 2007-1-5 18:37 |
EA Administrator 投稿: 4288 |
Re: コード生成テンプレートに関するTIPSその2:コードテンプレートのカスタマイズ関連です。
2.出力書式の設定 (1)コード生成テンプレートを開き、言語を設定する ・EAのメインメニュー[設定]-[コード生成のテンプレート] ・言語をC++に選択設定する(左上) (2)多重定義回避用のマクロ文を修正する File の 16~20行を以下のように変更する。 $guid = "EA_" + %TRIM(eaGUID,"{}")% $guid = %REPLACE($guid,"-","_")% $guid += "__INCLUDED_" #if !defined($guid) #define $guid\n %ImportSection% %list="Namespace" @separator="\n\n"% #endif // !defined($guid)\n →$fname = %fileName% $fname = "T" + %TO_UPPER($fname)% $fname = %REPLACE($fname,".","")% #ifndef $fname #define $fname\n %ImportSection% %list="Namespace" @separator="\n\n"% #endif (3)括弧{}のスタイルを変更する Class Body Impl の 12, 16, 21 行目: ){\n\n} →)\n{\n\n} に変更(コンストラクタ,デストラクタ,コピーコンストラクタ用) Opreation Body の 1行目: {\n→\n{\nに変更(一般メッソド用) (4)public,protected,privateフィールドの出力順を逆転する。 Class Body の 68行目以降。以下の3ブロックを希望出力順にブロック単位で並替える $pubFeatures = %TRIM($pubFeatures, "\n")% $pubFeatures += "\n" + %list="Attribute" @separator="\n" @indent="\t" attScope=="Public" or linkAttAccess=="Public" or attScope=="Package" or linkAttAccess=="Package"% ・ ・(途中省略,Publicフィールドのブロック) ・ %endIf% $protFeatures = %TRIM($protFeatures, "\n")% $protFeatures += "\n" + %list="Attribute" @separator="\n" @indent="\t" attScope=="Protected" or linkAttAccess=="Protected"% ・ ・(途中省略,Protectedフィールドのブロック) ・ %endIf% $privFeatures = %TRIM($privFeatures, "\n")% $privFeatures += "\n" + %list="Attribute" @separator="\n" @indent="\t" attScope=="Private" or linkAttAccess=="Private"% ・ ・(途中省略,Privateフィールドのブロック) ・ %endIf% (5)属性の説明記述を"//"に続く1行表現に変更して直前に空白行を1行追加する。 Attribute Notes の記述を以下のように変更する。 %if genOptGenComments != "T"% %endTemplate% %PI=""% $style = %genOptCPPCommentStyle% %if $style == "XML.NET"% $wrapLen = %genOptWrapComment%(注:XML時の記述,wrapLen文コピー移動) %XML_COMMENT($wrapLen)% %elseIf $style == "JavaDoc"% $wrapLen = %genOptWrapComment%(注:Java時の記述,wrapLen文コピー移動) %JAVADOC_COMMENT($wrapLen)% %else% $wrapLen = %genOptWrapComment=="-1" ? "-1" : "40"%(注:C++時の記述,主な変更部分) $attribute = %WRAP_LINES(attNotes, $wrapLen, "//", "")% %if $attribute != ""% \n$attribute(注:空白行を追加) %endIf% (6)操作の書式を調整する。 メソッドコードの先頭"{"に続く空白行を削除する Operation Body の先頭行:\n{\n→\n{ メソッドコードの"{"に続く”振る舞い"の記述後の空白行2行を除く Operation Body の5行目:$behaviour\n\n→$behaviour メソッドコードの記述の最後に続けて空白行を1行追加する Operation の最終行:%endIf% →%endIf%(改行後)\n 3.出力の有効/無効設定 メインメニュー[ツール]-[オプション]からローカルオプションウィンドウを開く。 左ボックスの"ソースコードの生成と読み込み"以下の項目をクリック選択すると、出力機能の細かなON/OFF設定を行える。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |