掲示板一覧   -   トピック一覧
   EA ソースコード生成・コード生成テンプレート
     C++ 前方宣言のステレオタイプ


スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
未登録ゲスト
投稿日時: 2010-3-26 12:08

C++ 前方宣言のステレオタイプ

コーディング規約の関係から、現在インクルード/前方宣言をカスタマイズしようとしています。
インクルードはうまくいきましたが、前方宣言については、
$refernce += %list="Import__reference" @separator="\n" importFromDependency=="T"
のように表記し、クラスの場合はだけならうまくいきますが、ステレオタイプstructのクラスについては、
struct classA ;
の要に表記を変更する必要があります。

importセクションから対象となるimportクラスのステレオタイプを取得する方法、ないしはその他に前方宣言を切り替えるやり方などはありますでしょうか?
sugimoto
投稿日時: 2010-3-26 13:17
EA Administrator
投稿: 1895

Re: C++ 前方宣言のステレオタイプ

いただいたご質問の内容についてですが、自クラス要素のステレオタイプによって
出力内容を変えたいということでしょうか?

この場合は、classStereotypeによってステレオタイプの文字列を
取得できますので、例えば、以下のようなif文を追加することで
出力内容を変更できます。

%if classStereotype == "" %
(前方宣言の内容)
%endIf%

このマクロにつきましては、ヘルプ「フィールド置換マクロ」
に記載がございます。

ご確認のほど、よろしくお願いいたします。

弊社回答がご質問の意図に合っていない場合は、ご指摘ください。
未登録ゲスト
投稿日時: 2010-3-26 13:59

Re: C++ 前方宣言のステレオタイプ

すいません、説明不足でした。

自クラスではなく、接続関係を持つ他のクラスを、関係性によっては
ヘッダファイルへのincludeでなく、前方宣言にしたいのです。

関係性を判定して動作を切り替えることはできました。
しかし、接続関係のあるクラスが実際には"struct"で宣言されていると、前方宣言もstructで行う必要があります。
接続関係にあるクラスのステレオタイプを取得する必要があるのです
が、classStereoTypeだと、自クラスのステレオタイプがとれて
しまいます。

import部では判断できないでしょうか?

よろしくお願いします。
sugimoto
投稿日時: 2010-3-26 14:54
EA Administrator
投稿: 1895

Re: C++ 前方宣言のステレオタイプ

ご質問の意図を理解できておらず、お手数をお掛けし申し訳ございません。

まず、importのテンプレートでは、接続先のクラス要素の情報を
取得することはできません。

接続先のクラス要素のステレオタイプを参照して出力内容を判断更する方法について
以下の2つをご提案させていただきます。

1) アドインを作成する

自クラス要素の情報を元に、接続先のクラス要素のステレオタイプを取得し、
そのステレオタイプを返却するアドインを作成します。
importのテンプレートから機能マクロEXEC_ADD_INを利用してアドインを呼び、
取得したステレオタイプの情報から出力する情報を切り替えます。

2) コード生成テンプレートをカスタマイズする

接続先のクラス要素の情報は、Connectorのテンプレートからであれば取得できます。
既定のテンプレートには、Connectorのテンプレートはないため、
新規に追加し、その中でステレオタイプの判断・出力内容を定義します。

ただし、Connectorのテンプレートは、importから呼ぶことはできず、
Classのテンプレートからのみ呼ぶことができます。
Classテンプレートで、クラスの情報を出力する前に、追加した
Connectorのテンプレートを呼ぶことで、クラス定義よりも前に
前方宣言などを出力することができます。

例)
「Class」テンプレートの先頭に以下を追加
%list="Connector__import" @separator="\n"%

「Connector__import」テンプレートを新規追加し、以下のような記述を行う
(Connector__importのimport部分の名前は自由です)

%if connectorDestElemGUID != classGUID and connectorDestElemStereotype=="struct"%
struct %connectorDestElemName%;
%endIf%
(このif文では接続の種類(依存など)は判定していませんが、条件を追加することも可能です)

上記いずれかの方法で対応可能でしょうか?

何かご不明点などありましたら、ご遠慮なくご連絡ください。
未登録ゲスト
投稿日時: 2010-3-26 18:42

Re: C++ 前方宣言のステレオタイプ

回答ありがとうございます。

1)の方法は少々敷居が高そうなので、2)の方法を試してみたところ、
希望通りの動作をさせることができました。

ありがとうございました。
sugimoto
投稿日時: 2010-3-29 9:53
EA Administrator
投稿: 1895

Re: C++ 前方宣言のステレオタイプ

ご確認ありがとうございました。

2)の方法でご希望の出力ができたようで安心いたしました。

そのほかご不明点などございましたら、ご連絡下さい。
今後ともよろしくお願いします。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ