コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「AspectC++」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
編集の要約なし
Cewbot (会話 | 投稿記録)
m Bot作業依頼: sourceタグをsyntaxhighlightタグに置換 (Category:非推奨のsourceタグを使用しているページ) - log
 
5行目: 5行目:
たとえばあるAPIコールが呼び出されるタイミングを全てトレースしたい場合、コードのあちこちにcerrやprint文を挿入するのではなく、以下のように実装して1つのアスペクトを生成する。
たとえばあるAPIコールが呼び出されるタイミングを全てトレースしたい場合、コードのあちこちにcerrやprint文を挿入するのではなく、以下のように実装して1つのアスペクトを生成する。


<source lang="cpp">
<syntaxhighlight lang="cpp">
aspect Tracer
aspect Tracer
{
{
13行目: 13行目:
}
}
};
};
</syntaxhighlight>
</source>


上記のTracerアスペクトは<code>%Iter::Reset</code>が呼ばれる前にメッセージを出力する。<code>%Iter</code>という構文はIterの終わりで全てのクラスにマッチするという意味である。
上記のTracerアスペクトは<code>%Iter::Reset</code>が呼ばれる前にメッセージを出力する。<code>%Iter</code>という構文はIterの終わりで全てのクラスにマッチするという意味である。
19行目: 19行目:
ソースコード内でマッチした場所をジョインポイントと呼び、アドバイスはそのコードに挿入される。AspectC++はジョインポイントについての情報にアクセスするためのジョインポイントAPIがある。たとえば
ソースコード内でマッチした場所をジョインポイントと呼び、アドバイスはそのコードに挿入される。AspectC++はジョインポイントについての情報にアクセスするためのジョインポイントAPIがある。たとえば


<source lang="cpp">
<syntaxhighlight lang="cpp">
JoinPoint::signature()
JoinPoint::signature()
</syntaxhighlight>
</source>


という関数は(<code>%Iter::Reset</code>にマッチした)これから呼び出されようとしているメソッド名を返す。
という関数は(<code>%Iter::Reset</code>にマッチした)これから呼び出されようとしているメソッド名を返す。

2020年7月5日 (日) 23:02時点における最新版

AspectC++(アスペクトシープラスプラス)はC言語及びC++アスペクト指向プログラミングを実現するための機能拡張。AspectC++のソースコードをC++のソースコードに変換する。GNU GPLライセンスであるが、一部のMicrosoft Windows固有の機能についてはpure-systems社のみが提供している。

アスペクト指向プログラミング横断的関心事英語版をアスペクト(側面)として1つにモジュール化できる。アスペクトは既存のクラスを修正できるが、一般的には既存の機能の実行前か実行後などで動作する「アドバイス」を提供する。

たとえばあるAPIコールが呼び出されるタイミングを全てトレースしたい場合、コードのあちこちにcerrやprint文を挿入するのではなく、以下のように実装して1つのアスペクトを生成する。

aspect Tracer
{ 
   advice call("% %Iter::Reset(...)") : before()
   {
      cerr << "次でIter::Resetが呼ばれます " << JoinPoint::signature() << endl;
   }
};

上記のTracerアスペクトは%Iter::Resetが呼ばれる前にメッセージを出力する。%Iterという構文はIterの終わりで全てのクラスにマッチするという意味である。

ソースコード内でマッチした場所をジョインポイントと呼び、アドバイスはそのコードに挿入される。AspectC++はジョインポイントについての情報にアクセスするためのジョインポイントAPIがある。たとえば

JoinPoint::signature()

という関数は(%Iter::Resetにマッチした)これから呼び出されようとしているメソッド名を返す。

ジョインポイントAPIはまたアスペクト内で利用できるコンパイル時型情報を持ち、引数の型や値にアクセスしたり、メソッドや関数の戻り値の型や値にアクセスできる。

AspectC++ウェブサイト(下記外部)にドキュメントやチュートリアルがあるほか、AOSDカンファレンス[1]の議事録にはAspect指向プログラミングとAspectC++に関する記事が掲載されている。

脚注

[編集]

外部リンク

[編集]