Используйте C++ STL в Enterprise Architect

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

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


person MOnsDaR    schedule 14.04.2011    source источник


Ответы (2)


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

Передовой инжиниринг:

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

Установить для всех классов коллекций значение std::vector

Убедитесь, что вы задали классы контейнера для целевого класса ассоциации, а не для исходного. Установите Множественность для Целевой роли на несколько (отличается от 0, 0..1, 1 и пустого поля в соответствии с шаблоном кода). Кроме того, установите Containment для Target Role ассоциации на Value, чтобы избежать создания указателя на контейнер.

Другой, более гибкий способ — изменить шаблоны кода в Настройки -> Шаблоны генерации кода. Я считаю, что есть способ переопределить шаблон по умолчанию для стереотипных соединителей, хотя я никогда не пробовал. Вероятно, это единственный способ генерировать указатели 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 к этому тривиально.

Обратный инжиниринг

Я не знаю, работает ли вышеизложенное, если вы занимаетесь проектированием туда и обратно. Я предполагаю, что тот факт, что определения асимметричны, вызовет проблемы.

person Gabor Herman    schedule 06.02.2013
comment
Кажется, это то, на что EA может пойти... Спасибо за подробный ответ! - person MOnsDaR; 06.02.2013

Я играл с такими вещами, и это выполнимо... просто.

Что вам нужно сделать, так это перепроектировать библиотеки из исходного кода, но, поскольку EA не содержит полного препроцессора, вы получите множество ошибок «Возможно, вам потребуется определить языковой макрос». Возможно, сначала поможет прогон исходного кода через препроцессор.

Другой способ, конечно, состоит в том, чтобы просто добавлять классы STL по мере необходимости.

Что касается типов контейнеров, я не уверен, обеспечивает ли EA какую-либо поддержку таких конструкций, как Allocator в

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

Однако классы простых шаблонов определяются как классы с параметрами шаблона. Самый простой способ создать экземпляр — создать новый класс, перейти на вкладку «Шаблоны» и добавить привязку к классу шаблона; это позволяет вам выбирать значения для формальных параметров шаблона.

person Uffe    schedule 19.07.2011