8

EnterpriseArchitectでC++STLの一部を使用するにはどうすればよいですか?特定のクラス属性をタイプとして指定したり、タイプとして使用(または)したり
できると便利です。std::stringstd::auto_ptrstd::tr1::shared_ptr

もう1つの興味深い点は、EAのようなコンテナタイプをEAに統合する方法std::vectorですstd::map

4

2 に答える 2

3

STLコンテナがEAにどのように見えるかを教えましたが、stlポインタにも拡張できると思います。

フォワードエンジニアリング:

この方法で、言語設定でグローバルに異なる多重度のコレクションクラスを定義したり、プロジェクトの特定のクラス(これにより、他のクラスに「含まれる」方法を定義する)を定義したりできます。簡単な設定例:

すべてのコレクションクラスをstd::vectorに設定します

ソースではなく、アソシエーションのターゲットクラスのコンテナクラスを設定してください。ターゲットロールの多重度を複数に設定します(コードテンプレートに応じて、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ポインターを追加するのは簡単だと思います。

往復エンジニアリング

往復エンジニアリングを行う場合、上記が機能するかどうかはわかりません。定義が非対称であるという事実が問題を引き起こすと思います。

于 2013-02-06T18:39:48.020 に答える
1

私はこの種のことをいじっていました、そしてそれは実行可能です...ちょうど。

必要なのは、ソースからライブラリをリバースエンジニアリングすることですが、EAには完全なプリプロセッサが含まれていないため、「言語マクロを定義する必要があるかもしれません」というエラーが多数発生します。おそらく、最初にプリプロセッサを介してソースを実際に実行すると役立つでしょう。

もちろん、もう1つの方法は、必要に応じてSTLクラスを追加することです。

コンテナタイプに関しては、EAがアロケータのような構造をサポートしているかどうかはわかりません

template < class T, class Allocator = allocator<T> > class vector;

ただし、単純なテンプレートクラスは、テンプレートパラメータを持つクラスとして定義されます。インスタンス化を作成する最も簡単な方法は、新しいクラスを作成し、その[テンプレート]タブに移動して、テンプレートクラスにバインディングを追加することです。これにより、正式なテンプレートパラメータの値を選択できます。

于 2011-07-19T11:03:34.110 に答える