如何解决在Enterprise Architect中使用C ++ STL
| 如何在Enterprise Architect中使用C ++ STL的某些部分? 能够将某些类属性指定为std::string
或使用std::auto_ptr
(甚至std::tr1::shared_ptr
)作为类型将是很好的。
另一个有趣的事情是如何将诸如std::vector
和ѭ4container之类的容器类型集成到EA中。
解决方法
我已经教过STL容器对EA的外观,我想它也可以扩展到stl指针:
正向工程:
您可以通过语言设置在全局范围内为不同的多重性定义集合类,也可以为项目的特定类定义集合类(这将在其他类中定义其“包含”方式)。
简单的示例设置:
确保为关联的目标类而不是源设置容器类。将目标角色的多重性设置为多个(根据代码模板,与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;
但是,简单的模板类定义为带有模板参数的类。创建实例的最简单方法是创建一个新的类,进入其“模板”选项卡,并向模板类添加一个“绑定”。这使您可以选择正式模板参数的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。