АспектС ++ - AspectC++

Компилятор AspectC ++
Разработчики)Олаф Спинчик (руководитель проекта), Георг Блашке, Кристоф Борхерт, Бенджамин Крамер, Даниэль Ломанн, Хорст Ширмайер, Уте Спинчик, Рейнхард Тартлер, Маттиас Урбан [1]
изначальный выпуск6 ноября 2001 г.; 19 лет назад (2001-11-06) [2]
Стабильный выпуск
2.2 / 10 марта 2017; 3 года назад (2017-03-10)
Написано вC ++
Операционная системаКроссплатформенность
ТипКомпилятор исходного кода
ЛицензияGPL 2+
Интернет сайтwww.aspectc.org

АспектС ++ является аспектно-ориентированный расширение C и C ++ языков. Оно имеет компилятор исходного кода, который переводит AspectC ++ исходный код в компилируемый C ++. Компилятор доступен под GNU GPL хотя некоторые расширения специфичные для Майкрософт Виндоус доступны только через pure-systems GmbH.

Аспектно-ориентированное программирование позволяет объединить сквозные задачи в единую модуль, аспект. Аспекты могут изменять существующие классы, но чаще всего они предоставляют «советы», которые выполняются до, после или вокруг существующих функций.

пример

Все вызовы конкретной функции можно отследить с помощью аспекта, а не вставляя во многих местах операторы cerr или print:

аспект Tracer{    совет вызов("%% Iter :: Reset (...)") : перед()   {      Cerr << "собирается вызвать Iter :: Reset для" << JoinPoint::подпись() << конец;   }};

Аспект Tracer распечатает сообщение перед любым вызовом % Iter :: Сброс. В % Iter синтаксис означает, что он будет соответствовать всем классам, заканчивающимся на Iter.

Каждое «совпадающее» место в исходном коде называется точка соединения - совет присоединяется к этому коду (или советует). AspectC ++ предоставляет API точки соединения для предоставления и доступа к информации о точке соединения. Например, функция:

JoinPoint::подпись()

возвращает имя функции (которая соответствует % Iter :: Сброс), который будет вызван.

API точки соединения также предоставляет время компиляции информация о типе, которую можно использовать в аспекте для доступа к типу или значению аргументов, а также к типу и возвращаемому значению метода или функции.

использованная литература

внешние ссылки