Использование C++ STL в Enterprise Architect

как можно использовать части C++ STL в Enterprise Architect?
Было бы неплохо иметь возможность указать определенные атрибуты класса как std::string или использовать std::auto_ptr (или даже std::tr1::shared_ptr) в качестве типов.

еще одна интересная вещь - как можно интегрировать контейнерные типы, такие как std::vector и std::map в EA.

2 ответов


Я научил, как выглядят контейнеры STL для EA, я думаю, его можно расширить до указателей stl:

вперед машиностроения:

вы можете определить классы коллекции для разных кратностей глобально в языковых настройках или для определенного класса вашего проекта (это определит, как он "содержится" в других классах) таким образом. Простой пример:

Set all collection classes to 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 предоставляет какую-либо поддержку для таких конструкций, как распределитель в

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

простые классы шаблонов, однако, определяются как класс с параметрами шаблона. Самый простой способ создать экземпляр-создать новый класс, перейти на вкладку шаблоны и добавить привязку к классу шаблонов; это позволяет выбрать значения для параметров формального шаблона.