EnterpriseArchitectでC++STLの一部を使用するにはどうすればよいですか?特定のクラス属性をタイプとして指定したり、タイプとして使用(または)したり
できると便利です。std::string
std::auto_ptr
std::tr1::shared_ptr
もう1つの興味深い点は、EAのようなコンテナタイプをEAに統合する方法std::vector
ですstd::map
。
EnterpriseArchitectでC++STLの一部を使用するにはどうすればよいですか?特定のクラス属性をタイプとして指定したり、タイプとして使用(または)したり
できると便利です。std::string
std::auto_ptr
std::tr1::shared_ptr
もう1つの興味深い点は、EAのようなコンテナタイプをEAに統合する方法std::vector
ですstd::map
。
STLコンテナがEAにどのように見えるかを教えましたが、stlポインタにも拡張できると思います。
フォワードエンジニアリング:
この方法で、言語設定でグローバルに異なる多重度のコレクションクラスを定義したり、プロジェクトの特定のクラス(これにより、他のクラスに「含まれる」方法を定義する)を定義したりできます。簡単な設定例:
ソースではなく、アソシエーションのターゲットクラスのコンテナクラスを設定してください。ターゲットロールの多重度を複数に設定します(コードテンプレートに応じて、0、0..1、1および空のフィールドとは異なります)。また、コンテナへのポインタが生成されないように、関連付けのターゲットロールの包含を値に設定します。
もう1つのより柔軟な方法は、[設定]->[コード生成テンプレート]でコードテンプレートを変更することです。試したことはありませんが、ステレオタイプ化されたコネクタのデフォルトのテンプレートを上書きする方法があると思います。コレクションクラス定義はEAによって1より大きい多重度に対してのみ使用されるため、これがSTLポインターを生成する唯一の方法である可能性があります。
リバースエンジニアリング:
[ツール]->[オプション]->[ソースコードエンジニアリング]->[C++]に移動し、[追加のコレクションクラス]に次の文字列を追加します。
vector<#TYPE#*>;deque<#TYPE#*>;list<#TYPE#*>;stack<#TYPE#*>;queue<#TYPE#*>;priority_queue<#TYPE#*>;set<#TYPE#*>;map<*,#TYPE#*>;multiset<#TYPE#*>;multimap<*,#TYPE#*>;
私は試したことがありませんが、これにSTLポインターを追加するのは簡単だと思います。
往復エンジニアリング
往復エンジニアリングを行う場合、上記が機能するかどうかはわかりません。定義が非対称であるという事実が問題を引き起こすと思います。
私はこの種のことをいじっていました、そしてそれは実行可能です...ちょうど。
必要なのは、ソースからライブラリをリバースエンジニアリングすることですが、EAには完全なプリプロセッサが含まれていないため、「言語マクロを定義する必要があるかもしれません」というエラーが多数発生します。おそらく、最初にプリプロセッサを介してソースを実際に実行すると役立つでしょう。
もちろん、もう1つの方法は、必要に応じてSTLクラスを追加することです。
コンテナタイプに関しては、EAがアロケータのような構造をサポートしているかどうかはわかりません
template < class T, class Allocator = allocator<T> > class vector;
ただし、単純なテンプレートクラスは、テンプレートパラメータを持つクラスとして定義されます。インスタンス化を作成する最も簡単な方法は、新しいクラスを作成し、その[テンプレート]タブに移動して、テンプレートクラスにバインディングを追加することです。これにより、正式なテンプレートパラメータの値を選択できます。