掲示板一覧   -   トピック一覧
   Enterprise Architect 全般
     実装しないメソッド(C++)


スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
未登録ゲスト
投稿日時: 2008-6-10 2:36

実装しないメソッド(C++)

C++における実装テクニックのひとつに、コピーコンストラクタや代入演算子をprivateで宣言してオブジェクトのコピーを抑制する手法があります。このとき、大抵それらは使われることがないので、一般的には実装しません。

これをEAで表現できないものかと...。

ソースコードを生成するときに余計な実装を書き出さないでくれればそれでいいのですけど、テンプレートに細工するにしても、何かフラグになるものがないと難しいかと。

ステレオタイプを利用すれば実現可能かな?
sugimoto
投稿日時: 2008-6-10 9:46
EA Administrator
投稿: 1895

Re: 実装しないメソッド(C++)

こちらは以下の設定で、実現可能かと思います。

メインメニューから「ツール」→「オプション」の「オブジェクトの生成」
ページにある”コピーコンストラクタの生成”チェックボックスを有効にした状態で
ソースコードを生成し、ご希望の出力になっているかご確認ください。

よろしくお願いします。
未登録ゲスト
投稿日時: 2008-6-10 11:22

Re: 実装しないメソッド(C++)

残念ながら、期待した結果にはならないようです。
コピーコンストラクタの生成のオン/オフや可視性の組み合わせを変えてみましたが、結果は同じです。

まず、前提として、既存のソースコード(コピーコンストラクタや代入演算子がprivateで未実装)を読み込み、そのモデルからソースコードを再作成しています。
生成されたヘッダファイルの記述そのものは期待したとおりなのですが、実装の抑制ができない、というところを何とかしたいわけです。

このイディオムの肝は、オブジェクトの意図しない複製をコンパイル時エラーとして検出するところにあり、実装は必要とされていません。

空の実装にしておけばいいではないか、という意見もあろうかと思いますが、不必要な実装を書き出したくはありませんし、PC用のプログラムならともかく、組み込み系では少しでもコードサイズを抑えたい場合があります。
コンパイラやリンカによる最適化が期待できるならともかく、多数の細かいクラスがあると無視できないことも...。

まぁ、モデリングの領域に実装のテクニックを持ち込むのもどうかとは思いますが、ソースコードの完全な同期がとれないのはもったいなくて...。
tkouno
投稿日時: 2008-6-10 11:41
EA Administrator
投稿: 3939

Re: 実装しないメソッド(C++)

詳細なご説明ありがとうございました。

ご希望の内容について、ステレオタイプやタグ付き値などで制御するということで
あれば、コード生成テンプレートをカスタマイズすることで
可能かもしれません。

ステレオタイプで制御する場合には、例えばコード生成したくない
メソッドに(例として)「NoGenerate」を設定します。

コード生成テンプレートエディタで、「Operation」「Operation Impl」の
それぞれのテンプレートについて「ステレオタイプ指定のテンプレートの追加」ボタンを
押してテンプレートを追加し、特性のステレオタイプとして
先ほどの「NoGenerate」を設定します。

あとは、この追加したテンプレートの中身を空にすることで
何も出力されなくなります。


なお、この方法の場合、オプションの「読み込み時にコードにない
操作をモデルから削除」が有効になっていると
上記の方法で出力したコードを同期すると、ステレオタイプが
設定された操作は削除されてしまいますので
このオプションのチェックを外しておいてください。


上記の方法でご要望を満たすことはできますでしょうか?
ご確認のほどよろしくお願いします。
未登録ゲスト
投稿日時: 2008-6-10 12:27

Re: 実装しないメソッド(C++)

やはり、テンプレートで対応するしかないですかね。

この件については、当該案件の開発に取り掛かったばかりで、テンプレート等、開発環境の整備はこれからになりますので、何か問題があれば、一般的な質問として、また改めて投稿します。

ありがとうございました。
tkouno
投稿日時: 2008-6-10 13:08
EA Administrator
投稿: 3939

Re: 実装しないメソッド(C++)

ご確認ありがとうございました。
基本的には、テンプレートで対応する形になるかと思います。

もし何かありましたら、遠慮なくご質問ください。
今後ともよろしくお願いします。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ