在Enterprise Architect中使用C ++ STL

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

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


我已经教过STL容器如何看起来像EA,我想它也可以扩展为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没有包含完整的预处理器,最终会出现很多“你可能需要定义语言宏”的错误。 也许实际上首先通过预处理器来运行源代码会有所帮助。

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

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

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

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

链接地址: http://www.djcxy.com/p/51929.html

上一篇: Use the C++ STL in Enterprise Architect

下一篇: From Image to Varbinary(max)