AspectC++
Utvecklare | Olaf Spinczyk (projektledare), Georg Blaschke, Christoph Borchert, Benjamin Kramer, Daniel Lohmann, Horst Schirmeier, Ute Spinczyk, Reinhard Tartler, Matthias Urban |
---|---|
Initial release | 6 november 2001 |
Stabil frisättning | 2.3 / 17 februari 2021
|
Skrivet i | C++ |
Operativ system | Cross-plattform |
Typ | Källa-till-källa-kompilator |
Licens | GPL 2+ |
Hemsida |
AspectC++ är en aspektorienterad förlängning av C- och C++ -språken. Den har en källa-till-källa-kompilator , som översätter AspectC++- källkod till kompilerbar C++. Kompilatorn är tillgänglig under GNU GPL , även om vissa tillägg som är specifika för Microsoft Windows endast är tillgängliga via pure-systems GmbH.
Aspektorienterad programmering tillåter modularisering av tvärgående problem i en enda modul , en aspekt . Aspekter kan modifiera befintliga klasser , men oftast ger de "råd" som körs före, efter eller kring befintlig funktionalitet.
Exempel
Alla anrop till en specifik funktion kan spåras med hjälp av en aspekt, snarare än att infoga "cerr" eller print-satser på många ställen:
aspect Tracer { rådgivningsanrop ( "% %Iter::Reset(...)" ) : före () { cerr << "om att anropa Iter::Återställ för " << JoinPoint :: signatur ( ) << endl ; } };
Spårningsaspekten kommer att skriva ut ett meddelande före varje anrop till %Iter::Reset
. % Iter
-syntaxen betyder att den kommer att matcha alla klasser som slutar på Iter.
Varje "matchad" plats i källkoden kallas en kopplingspunkt - rådet kopplas till (eller ger råd) den koden. AspectC++ tillhandahåller ett API för kopplingspunkt för att tillhandahålla och åtkomst till information om kopplingspunkten. Till exempel funktionen:
JoinPoint :: signatur ()
returnerar namnet på funktionen (som matchade %Iter::Reset
) som är på väg att anropas.
Join Point API tillhandahåller också information om kompileringstid som kan användas inom en aspekt för att komma åt typen eller värdet på argumenten och returtypen och returvärdet för en metod eller funktion.
externa länkar