掲示板一覧   -   トピック一覧
   EA ソースコード生成・コード生成テンプレート
     static変数の初期値を設定したが、ソースコードに反映されない


スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
sugimoto
投稿日時: 2007-8-8 13:11
EA Administrator
投稿: 1895

static変数の初期値を設定したが、ソースコードに反映されない

○ご質問

クラスの属性をstaticに設定し、初期値を設定したのですが、
C++のソースコードに反映されませんでした。
初期化リストで初期化をするようにできますか?

○回答

C++の初期値を初期化リストに反映する場合は、コード生成テンプレート
の編集が必要になります。

Class Body Impl テンプレートのコンストラクタを出力している箇所に
クラスの属性およびその初期値を出力するように変更してください。
未登録ゲスト
投稿日時: 2007-10-12 10:24

Re: static変数の初期値を設定したが、ソースコードに反映されない

この回答で解決できたのでしょうか?
私はconstの初期値をソースコードに出力したくてこの掲示板を検索しました。
Class Body Impl テンプレートにどのように記述すれば良いかがわかりません。
色々調べて考えた結果、Class Body Implではなく、
attribute Declarationの最後にある

%if attCollection == "T" and attContainerType != ""%
%attContainerType%
%endIf%
;

の前に

%if attInitial != ""%
= %attInitial%
%endIf%

を追加して初期値が設定してある場合に出力するようにしました。
この上の
%attName%
に先頭箇所にある記述でENUMの場合に値を出力できるようになっているようですが、
%endTemplate%
の使い方がよくわからなかったので上記のようにしました。
sugimoto
投稿日時: 2007-10-12 10:46
EA Administrator
投稿: 1895

Re: static変数の初期値を設定したが、ソースコードに反映されない

説明が不足しており申し訳ございません。

C++の場合に、static変数の初期値を設定する方法につきましては、
実際の回答時には、弊社で作成したコード生成テンプレートをお渡ししました。

掲示板には弊社サポートへいただいたご質問の概要を掲載させて
いただいておりますが、このコード生成テンプレートをご希望の方は、
弊社サポート support@sparxsystems.jp までご連絡いただければ、
お渡しする旨を記述が漏れておりました。申し訳ございません。


C++の場合ですと、属性の定義に初期値を記述するのではなく、
コンストラクタ時に、初期化する必要があるため、Attribute
に関するテンプレートではなく、Class Body Impl の編集が
必要になります。

属性の定義において初期値を設定すればよい言語であれば、
ご提案いただいた以下の対応で問題ございません。

引用:

%if attCollection == "T" and attContainerType != ""%
%attContainerType%
%endIf%
;

の前に

%if attInitial != ""%
= %attInitial%
%endIf%

を追加して初期値が設定してある場合に出力するようにしました。
この上の
%attName%
に先頭箇所にある記述でENUMの場合に値を出力できるようになっているようですが、
%endTemplate%
の使い方がよくわからなかったので上記のようにしました。


なお、%endTemplate%は、その時点で該当のテンプレートを終了し、
それ以降に記述された処理は行わないことを示しています。

お手数をお掛けしており、申し訳ございません。

上記内容について、ご確認のほど、よろしくお願いいたします。

弊社で編集したコード生成テンプレートをご希望の場合は、
弊社サポートまでご連絡ください。
tkouno
投稿日時: 2013-12-19 11:06
EA Administrator
投稿: 3939

Re: static変数の初期値を設定したが、ソースコードに反映されない

この内容につきまして、以下のいずれかの条件の場合には、ソースコードには反映されません。

・既にソースコードが存在し、コンストラクタの定義がある場合
・対象のUMLクラス要素の操作として、コンストラクタの定義がある場合
 (一度ソースコードを生成してリバースすると、自動生成されるコンスト
  ラクタなどがUMLクラス要素に反映されますが、この状態の場合)


なお、この条件でも内容が生成されるようにするためには
「Operation Declaration Impl」テンプレートにて初期化リストを追加するように
独自にカスタマイズする必要がございます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ