АспектС++
Разработчик(и) | Олаф Спинчик (руководитель проекта), Георг Блашке, Кристоф Борхерт, Бенджамин Крамер, Даниэль Ломанн, Хорст Ширмайер, Уте Спинчик, Райнхард Тартлер, Матиас Урбан [ 1 ] |
---|---|
Первоначальный выпуск | 6 ноября 2001 г [ 2 ] |
Стабильная версия | 2.3
/ 17 февраля 2021 г |
Написано в | С++ |
Операционная система | Кросс-платформенный |
Тип | Компилятор исходного кода |
Лицензия | Лицензионная лицензия 2+ |
Веб-сайт | www |
AspectC++ — это аспектно-ориентированное расширение языков C и C++ . Он имеет компилятор исходного кода , который преобразует исходный код AspectC++ в компилируемый C++. Компилятор доступен под лицензией GNU GPL , хотя некоторые расширения, специфичные для Microsoft Windows, доступны только через pure-systems GmbH.
Аспектно-ориентированное программирование позволяет объединить сквозные задачи в один модуль — аспект . Аспекты могут изменять существующие классы , но чаще всего они предоставляют «советы», которые выполняются до, после или вокруг существующий функционал.
Пример
[ редактировать ]Все вызовы определенной функции можно отслеживать с помощью аспекта, а не вставлять во многих местах операторы cerr или print:
aspect Tracer
{
advice call("% %Iter::Reset(...)") : before()
{
cerr << "about to call Iter::Reset for " << JoinPoint::signature() << endl;
}
};
Аспект Tracer распечатает сообщение перед любым вызовом %Iter::Reset
. %Iter
синтаксис
означает, что он будет соответствовать всем классам, заканчивающимся на Iter.
Каждое «совпадающее» место в исходном коде называется точкой соединения — рекомендация присоединяется (или советуется) к этому коду. AspectC++ предоставляет API точки соединения для предоставления и доступа к информации о точке соединения. Например, функция:
JoinPoint::signature()
возвращает имя функции (которое соответствует %Iter::Reset
), который вот-вот будет вызван.
API точки соединения также предоставляет информацию о типе времени компиляции , которую можно использовать внутри аспект для доступа к типу или значению аргументов, а также типу и возвращаемому значению возвращаемого значения. метод или функция.
Ссылки
[ редактировать ]Внешние ссылки
[ редактировать ]- АспектС++
- Статьи по аспектно-ориентированному программированию и AspectC++ на прошлых конференциях AOSD