8

如何在 Enterprise Architect 中使用 C++ STL 的一部分?
能够将某些类属性指定为std::string或使用std::auto_ptr(甚至std::tr1::shared_ptr)作为类型会很好。

另一个有趣的事情是如何将容器类型(如EA)集成std::vectorstd::mapEA 中。

4

2 回答 2

3

我已经教过 STL 容器在 EA 中的样子,我想它也可以扩展到 stl 指针:

正向工程:

您可以在语言设置中为全局的不同多重性定义集合类,或者为项目的特定类(这将定义它如何“包含”在其他类中)以这种方式。简单示例设置:

将所有集合类设置为 std::vector

确保为关联的目标类设置容器类,而不是源类。将Target Role的Multiplicity设置为multiple(根据代码模板,不同于 0、0..1、1 和空字段)。此外,将关联目标角色的包含设置为以避免生成指向容器的指针。

另一种更灵活的方法是在Settings -> Code Generation Templates中修改代码模板。我相信有一种方法可以覆盖定型连接器的默认模板,尽管我从未尝试过。这可能是生成 STL 指针的唯一方法,因为集合类定义仅由 EA 用于大于 1 的多重性。

逆向工程

转到工具-> 选项-> 源代码工程-> 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 不包含完整的预处理器,您最终会遇到很多“您可能需要定义语言宏”错误。也许实际上首先通过预处理器运行源代码会有所帮助。

当然,另一种方法是根据需要添加 STL 类。

至于容器类型,我不确定 EA 是否为诸如 Allocator 之类的结构提供任何支持

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

然而,简单的模板类被定义为具有模板参数的类。创建实例化的最简单方法是创建一个新类,进入其模板选项卡并将绑定添加到模板类;这允许您选择形式模板参数的值。

于 2011-07-19T11:03:34.110 回答