在企业架构中使用C++ STL

8

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

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

2个回答

3

我已经向EA展示了STL容器的外观,我猜也可以将其扩展到STL指针:

正向工程:

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

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

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

另一种更灵活的方法是修改设置->代码生成模板中的代码模板。我相信有一种方法可以覆盖带有构造型连接符的默认模板,尽管我从未尝试过。这可能是生成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已经到了极限...感谢您详细的回答! - MOnsDaR

1

我一直在玩弄这种东西,它是可行的...只是有点困难。

你需要做的是从源代码中逆向工程库,但由于EA不包含完整的预处理器,你会遇到很多"您可能需要定义语言宏"的错误。也许先通过预处理器运行源代码会有所帮助。

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

至于容器类型,我不确定EA是否提供对像Allocator这样的构造的支持。

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

简单的模板类是定义为带有模板参数的类。创建实例的最简单方法是创建一个新类,进入其模板选项卡并添加到模板类的绑定;这样可以选择正式模板参数的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接