掲示板一覧   -   トピック一覧
   EA ソースコード生成・コード生成テンプレート
     テンプレート束縛のコード生成内容がEA9.1で変わってしまった


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

テンプレート束縛のコード生成内容がEA9.1で変わってしまった

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

○ご指摘

EA8.0においてBaseという名前のパラメタライズドクラスを作成し、
それを継承してパラメータに値(10)を入れたDerivedクラスを作成しました。
Derivedクラスには、ステレオタイプにtypedefを指定していました。

この時点でコードを生成すると以下のようになり、問題はありませんでした。

typedef Base<10> Derived;

問題1)
EA9.1で、EA8.0で作成したファイルを開くと継承関係はなくなってしまいました。
また、継承関係を引き直し、コード生成しても正しく出力されません。
EA8.0で作成したテンプレート束縛クラスは、EA9.1でそのまま使用することは
できないのでしょうか?

問題2) EA9.1で新規にテンプレート束縛のクラスを作成し、
コード出力すると以下のように余分なクラス定義が出力されてしまいます。

typedef Base<10> DerivedEA9;
{

public:
DerivedEA9();

};

何か回避策はありますでしょうか?
なお、コード生成テンプレートは、カスタマイズしています。

○回答

問題1)

・継承の関係がなくなってしまう件

EA8.0ビルド864にてDerivedとBaseを継承の関係で結び、そのファイルを
EA9.1でオープンしましたが、継承の関係がなくなってしまうという
現象は確認できませんでした。

ファイルをオープンするだけで継承の関係がなくなってしまったと
いうことでしょうか?それとも、何か機能を実行したタイミングでしょうか?
追加の情報がありましたらいただけますと助かります。


・コードが正しくない件

EA8.0ビルド864で作成したクラスをEA9.1でソースコード生成したところ、
以下のコードが生成されました。

typedef Base Derived;

EA8.0で作成したモデルは、EA9.1で生成すると<10>の部分が生成されて
いないことを確認できました。

カスタマイズされている「Linked Class Baseテンプレート」内の
以下が正しく判定されていないようです。

%if classIsInstantiated == 'T'%

こちらはEA9.1のバグの可能性もありますので、開発元に確認いたします。


問題2)

EA9.1の既定のコード生成テンプレートを利用した場合は問題なく生成できております。

お送りいただいたファイルでは、コード生成テンプレートがカスタマイズされているため、
最新の情報が反映されていませんでした。
EA9.1のコード生成テンプレートでは「ClassBodyテンプレート」の先頭に
以下の2行がありますので、テンプレートに追加してご確認いただけますでしょうか?

%if classIsInstantiated=="T"%
%endTemplate%

弊社では上記2行を追加することで、正しく生成されることを確認済みです。
tkouno
投稿日時: 2012-3-28 10:18
EA Administrator
投稿: 3939

Re: テンプレート束縛のコード生成内容がEA9.1で変わってしまった

上記「・コードが正しくない件」につきまして
ビルド931で修正いたしました。

長らくご迷惑をおかけし、申し訳ございませんでした。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ