Используйте C ++ STL в Enterprise Architect - PullRequest
7 голосов
/ 14 апреля 2011

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

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

Ответы [ 2 ]

3 голосов
/ 06 февраля 2013

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

Передовая инженерия:

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

Set all collection classes to std::vector

Убедитесь, что вы установили классы контейнеров для target класса ассоциации, а не источника. Установите Multiplicity для Target Role на множественное значение (отличается от 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 к этому тривиально.

Туда и обратно

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

1 голос
/ 19 июля 2011

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

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

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

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

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

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

...