Удалить вложения VCF (визитная карточка)

Позвольте мне добавить немного контекста. Для нашей работы требуются определенные пользователем литералы. Мы работаем над MDE (Model-Driven Engineering). Мы хотим определить модели и метамодели в C ++. Фактически мы реализовали отображение из Ecore в C ++ ( EMF4CPP ).

Проблема возникает, когда можно определять элементы модели как классы на C ++. Мы применяем подход преобразования метамодели (Ecore) к шаблонам с аргументами. Аргументами шаблона являются структурные характеристики типов и классов. Например, класс с двумя атрибутами int будет выглядеть примерно так:

typedef ::ecore::Class< Attribute, Attribute > MyClass;

Hoever, оказывается, что каждый элемент в модели или метамодели обычно имеет имя. Мы хотели бы написать:

typedef ::ecore::Class< "MyClass", Attribute< "x", int>, Attribute<"y", int> > MyClass;

BUT, C ++ или C ++ 0x не позволяют этого, так как строки запрещены как аргументы шаблонов. Вы можете написать имя char char, но это признак беспорядка. С помощью правильных пользовательских литералов мы могли бы написать что-то подобное. Скажем, мы используем «_n» для идентификации имен элементов модели (я не использую точный синтаксис, просто чтобы сделать идею):

typedef ::ecore::Class< MyClass_n, Attribute< x_n, int>, Attribute > MyClass;

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

0
задан Joseph Kessler 5 March 2019 в 15:08
поделиться