掲示板一覧   -   トピック一覧
   EA ソースコード生成・コード生成テンプレート
     構造体に名前空間を付加しない方法はありますか?


フラット表示 前のトピック | 次のトピック
投稿者 トピック
sugimoto
投稿日時: 2011-2-3 13:35
EA Administrator
投稿: 1992

構造体に名前空間を付加しない方法はありますか?

サポートに寄せられたご質問の要約です。

○ご質問

C++とCを混在したクラス図を記載しています。
その中でクラスから構造体へ関連を引いてソースコード生成を行ったのですが、
構造体に名前空間が付加されてしまいます。
生成ルールのカスタマイズ方法がわからなかったので、解決方法を教えてください。

○回答

通常のC++の部分は名前空間を生成し、構造体については名前空間を
生成しないようにしたいということと思います。

コード生成テンプレートの「Linked Attribute Declaration」では、
関連のあるクラスを属性として生成しています。

このテンプレートにおいて、通常は名前空間を生成している箇所を名前空間を
生成しないようにカスタマイズすることで実現可能です。

ただし、相手が構造体であることを確認するためにはステレオタイプの情報が
必要になりますが、このテンプレートでは相手のステレオタイプを取得できません。

そこで2通りの方法をご提案させていただきます。

方法1) アドインを作成する

「Linked Attribute Declaration」テンプレートでは接続のGUIDを取得できます。
このことを利用して、相手(接続先)のクラス要素のステレオタイプを取得するアドインを作成します。

機能マクロEXEC_ADD_INを利用して、テンプレートで作成したアドインを呼び、
取得したステレオタイプから名前空間を生成するか否かをif文で分岐させる方法があります。

アドインを作成しましたら、「Linked Attribute Declaration」テンプレートを
以下のように変更しますと、相手が構造体の場合は名前空間が生成されなくなります。

[通常](2行目)
$type=%RESOLVE_QUALIFIED_TYPE("::")%

[カスタマイズ]
$stereotype = %EXEC_ADD_IN("アドイン名","アドイン内の関数名", linkGUID)%
%if $stereotype == "struct"%
$type = %linkAttName%
%else%
$type=%RESOLVE_QUALIFIED_TYPE("::")%
%endIf%

方法1)につきまして、弊社でアドインを作成しましたのでお送りいたします。
(このアドインを使用したい方は、弊社サポートまでご連絡ください。)


方法2) 関連端に情報を設定する

「Linked Attribute Declaration」テンプレートではターゲットの関連端の情報であれば取得できます。

これを利用し、例えば、関連のターゲットの関連端のステレオタイプ欄に"struct"を設定し、
かつテンプレートを以下のように設定することで実現可能です。

[通常](2行目)
$type=%RESOLVE_QUALIFIED_TYPE("::")%

[カスタマイズ]
%if linkAttStereotype == "struct"%
$type = %linkAttName%
%else%
$type=%RESOLVE_QUALIFIED_TYPE("::")%
%endIf%
フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
 » 構造体に名前空間を付加しない方法はありますか? sugimoto 2011-2-3 13:35