掲示板一覧   -   トピック一覧
   EA ソースコード生成・コード生成テンプレート
     集約関係をコード生成する際にフィールドを配列で指定したい


フラット表示 前のトピック | 次のトピック
投稿者 トピック
sugimoto
投稿日時: 2007-7-11 17:37
EA Administrator
投稿: 1895

集約関係をコード生成する際にフィールドを配列で指定したい

○ご質問

1) 「集約」関係をコード生成する際にフィールドを配列で指定することは
 できますか?

 例)
 class ArrayElement{ };
 を「集約」のターゲットとして指定し、class Arrayをソースコード生成する。

 <現状>
 class Array{
   ArrayElement *m_ArrayElement;
 };
 <要望>
 class Array{
  std::vector< ArrayElement * > m_ArrayElement;
 };

2) #include <vector>を追加したい場合、どうすればよいですか?

○回答

1) ArrayElement クラスのプロパティ画面の詳細タブにあるコレクション
 クラスを編集してください。
 「既定のコレクションクラス」欄に"std::vector<#TYPE#>"と設定し、
 多重度を1..*にした場合は、上記のような出力になります。

 ポインタの位置は少し異なり、以下のようになります。
 std::vector<ArrayElement> *m_ArrayElement;

 なお、ArrayElementクラスのみではなく、全体的にvectorを使用する
 場合は、メインメニュー→「ツール」→「オプション」のC++ページにある
 コレクションクラスに、上記内容を設定してください。


2) 3通りほどご提案いたします。

○提案1

 あるクラスのヘッダのみに"#include <vector>"を出力したい場合:

 該当のクラスで右クリックして「ソースコードの生成」を選択し、
 インポートおよびヘッダの上段に#include <vector>を記述し、
 ソースコード生成を行う。

○提案2

 全てのヘッダファイルに"#include <vector>"を出力したい場合:

 コード生成テンプレートの以下の場所を編集します。

 1.コード生成テンプレートを開く(「設定」→「コード生成テンプレート」)
 2.言語をC++に設定する
 3.Fileテンプレートを開く
 4.以下の箇所を修正し、保存する

 [現状]
 %ImportSection%
 %list="Namespace" @separator="\n\n"%

 [変更案]
 %ImportSection%
 #include <vector>
 %list="Namespace" @separator="\n\n"%

○提案3

 Vectorの記述がされる場合(Vectorの設定がされており、かつ
 多重度が設定されている場合)のみ"#include <vector>"を出力
 したい場合:

 コード生成テンプレートを編集する必要があります。

 Namespaceテンプレートの中で、Namespaceの出力を行っていますが、
 "#include <vector>"はNamespaceの前に出力したいと思います。
 そのため、Namespaceの情報を出力する前に、"#include <vector>"を
 出力すべきかどうかの判断を行い、必要に応じて"#include <vector>"
 を記述する必要があります。

 この場合、Vectorの記述がされるかどうかを判断し、"#include <vector>"
 を出力する新しいテンプレートを作成する必要があります。
フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
 » 集約関係をコード生成する際にフィールドを配列で指定したい sugimoto 2007-7-11 17:37