如何在 Enterprise Architect 中使用 C++ STL 的一部分?
能够将某些类属性指定为std::string
或使用std::auto_ptr
(甚至std::tr1::shared_ptr
)作为类型会很好。
另一个有趣的事情是如何将容器类型(如EA)集成std::vector
到std::map
EA 中。
如何在 Enterprise Architect 中使用 C++ STL 的一部分?
能够将某些类属性指定为std::string
或使用std::auto_ptr
(甚至std::tr1::shared_ptr
)作为类型会很好。
另一个有趣的事情是如何将容器类型(如EA)集成std::vector
到std::map
EA 中。
我已经教过 STL 容器在 EA 中的样子,我想它也可以扩展到 stl 指针:
正向工程:
您可以在语言设置中为全局的不同多重性定义集合类,或者为项目的特定类(这将定义它如何“包含”在其他类中)以这种方式。简单示例设置:
确保为关联的目标类设置容器类,而不是源类。将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 指针是微不足道的。
往返工程
如果您进行往返工程,我不知道上述方法是否有效。我认为定义不对称的事实会引起问题。
我一直在玩这种东西,它是可行的......只是。
您需要做的是从源代码对库进行逆向工程,但由于 EA 不包含完整的预处理器,您最终会遇到很多“您可能需要定义语言宏”错误。也许实际上首先通过预处理器运行源代码会有所帮助。
当然,另一种方法是根据需要添加 STL 类。
至于容器类型,我不确定 EA 是否为诸如 Allocator 之类的结构提供任何支持
template < class T, class Allocator = allocator<T> > class vector;
然而,简单的模板类被定义为具有模板参数的类。创建实例化的最简单方法是创建一个新类,进入其模板选项卡并将绑定添加到模板类;这允许您选择形式模板参数的值。