青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

qiezi的學習園地

AS/C/C++/D/Java/JS/Python/Ruby

  C++博客 :: 首頁 :: 新隨筆 ::  ::  :: 管理 ::
AOP是近年炒得很熱,但卻用得很少的一門技術,不過這并不能阻止我去學習它。既然能一度炒得火熱,必定有過人之處。說AOP是一種思想或許更適合一些,它并不描述哪一種專有的技術,也不指定實現方式。

眾所周知,C++沒有豐富的動態類型信息,更沒有動態生成類的功能(C++類型在編譯后就基本上沒有類型存在了),所以無法像java一樣采用動態代理來實現AOP。

Aspect C++是C++的一個AOP實現,它使用了插入代碼的方法。

一個典型的Aspect C++示例需要一個C++源文件(.cpp)、一個Aspect C++源文件(.ah),通過ac++編譯器把C++源文件和Aspect C++源文件轉換成混合的C++源文件(如果有頭文件也會轉換),最后通過普通的C++編譯器編譯出可執行文件。

下面是一個簡單的示例:

1、C++源文件:
#include <stdio.h>

class A {
public:
  
int a(int i, float b);
};

int A::a(int i, float b) {
  printf(
"inside A::a(%d, %f)\n", i, b);
  
return i;
}

void b(char c, char *str) {
  printf(
"inside b(%c, %s)\n", c, str);
}

int main() {
  A a;
  a.a(
47113.14);
  b(
'H'"ello World");
  return 0;
}

2、Aspect C++源文件:
#include <stdio.h>

aspect Action {
  advice execution(
"% A::%()"|| execution("% b()") : around()  {
    printf(
"A: before(exec) %s\n", JoinPoint::signature());
    printf(
"that  : %p\n" , tjp->that());
    printf(
"target: %p\n" ,tjp->target());
    tjp
->proceed();
    printf(
"A: after(exec) %s\n", JoinPoint::signature());
  }
  advice call(
"% A::%()"|| call("% b()") : around()  {
    printf(
"A: before(call) %s\n", JoinPoint::signature());
    printf(
"that  : %p\n" , tjp->that());
    printf(
"target: %p\n" ,tjp->target());
    tjp
->proceed();
    printf(
"A: after(call) %s\n", JoinPoint::signature());
  }
};

aspect ActionB {
  advice execution(
"% A::%()"|| execution("% b()") : around()  {
    printf(
"B: before(exec) %s\n", JoinPoint::signature());
    printf(
"that  : %p\n" , tjp->that());
    printf(
"target: %p\n" ,tjp->target());
    tjp
->proceed();
    printf(
"B: after(exec) %s\n", JoinPoint::signature());
  }
  advice call(
"% A::%()"|| call("% b()") : around()  {
    printf(
"B: before(call) %s\n", JoinPoint::signature());
    printf(
"that  : %p\n" , tjp->that());
    printf(
"target: %p\n" ,tjp->target());
    tjp
->proceed();
    printf(
"B: after(call) %s\n", JoinPoint::signature());
  }
};

簡單說明一下:
1、“aspect Action”定義了一個“方面”,名字是“Action”,定義一個方面可以理解為“我關注程序的這個方面”。
2、“advice 切入點:位置”定義一個“處理方法”,在切入點的指定位置上執行代碼。切入點可以選擇call、execution、construction、destruction,分別表示調用、執行、構造函數、析構函數。執行點可以選擇before、after、around,分別表示在這些切入點的前面、后面或替換掉整個函數。
3、tpj表示thisJoinPoint,表示切入點本身。上面的例子由于使用around替換了整個執行過程,所以要執行原來的操作還需要調用tpj->proceed()。這里的around完成的功能可由一個before和一個after代替
4、切入點的匹配模式。切入點通過字符串來匹配要切入的操作,“%”字符表示匹配任意類型(或名字),在AspectJ中,這個字符是“*”,由于C++中“*”用來定義指針,所以在Aspect C++中用“%”;“...”用來匹配任意個參數。

編譯:
首先運行ac++ -p <你的源文件所在目錄> -d <輸出文件目錄> -I<附加頭文件目錄>,這一步會轉換C++源文件和Aspect C++源文件。

如果在安裝了VC,編譯時可指定INCLUDE路徑及_WIN32宏。
ac++ -p <你的源文件所在目錄> -d <輸出文件目錄> -I<附加頭文件目錄> -I"C:\Program Files\Microsoft Visual Studio 8\VC\include" -D_WIN32

然后直接編譯:
cl <源文件名>.cc

上面這個程序在處理前運行結果如下:
F:\soft\ac\examples\Action>main
inside A::a(
47113.140000)
inside b(H, ello World)

經Aspect C++處理后運行結果:
F:\soft\ac\examples\Action-out>main
A: before(call) 
int A::a(int,float)
that  : 
00000000
target: 0012FF73
B: before(call) 
int A::a(int,float)
that  : 
00000000
target: 0012FF73
A: before(exec) 
int A::a(int,float)
that  : 0012FF73
target: 0012FF73
B: before(exec) 
int A::a(int,float)
that  : 0012FF73
target: 0012FF73
inside A::a(
47113.140000)
B: after(exec) 
int A::a(int,float)
A: after(exec) 
int A::a(int,float)
B: after(call) 
int A::a(int,float)
A: after(call) 
int A::a(int,float)
A: before(call) 
void b(char,char *)
that  : 
00000000
target: 
00000000
B: before(call) 
void b(char,char *)
that  : 
00000000
target: 
00000000
A: before(exec) 
void b(char,char *)
that  : 
00000000
target: 
00000000
B: before(exec) 
void b(char,char *)
that  : 
00000000
target: 
00000000
inside b(H, ello World)
B: after(exec) 
void b(char,char *)
A: after(exec) 
void b(char,char *)
B: after(call) 
void b(char,char *)
A: after(call) 
void b(char,char *)

posted on 2005-12-15 15:43 qiezi 閱讀(2968) 評論(7)  編輯 收藏 引用 所屬分類: C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国际精品欧美精品| 91久久久久久久久| 久久久一本精品99久久精品66| 久久精品视频免费| 亚洲电影一级黄| 亚洲午夜激情| 久久国产主播| 欧美刺激午夜性久久久久久久| 欧美日韩不卡视频| 国产日韩欧美一区二区| 亚洲激情图片小说视频| 亚洲欧美日韩精品| 欧美jizzhd精品欧美巨大免费| 亚洲日本成人在线观看| 久久免费高清| 在线观看av一区| 亚洲国产精品123| 欧美成人精品不卡视频在线观看| 国内一区二区在线视频观看| 久久免费精品日本久久中文字幕| 亚洲国产视频一区| 欧美va天堂va视频va在线| 亚洲第一区在线| 亚洲国产精品一区| 久久久久久久综合狠狠综合| 国产亚洲二区| 久久欧美中文字幕| 久久国产精品亚洲77777| 欧美性大战xxxxx久久久| 一本色道久久综合亚洲91| 国产亚洲欧美在线| 久久人人爽人人爽| 久久国产婷婷国产香蕉| 亚洲高清av在线| 亚洲激情成人网| 国产精品中文字幕欧美| 亚洲第一二三四五区| 欧美日韩免费观看一区=区三区| 一道本一区二区| 性色av一区二区三区红粉影视| 国产精品二区二区三区| 欧美一区二区视频在线观看2020| 亚洲欧美日韩在线| 日韩亚洲欧美综合| 亚洲综合首页| 亚洲国产精品黑人久久久| 亚洲国产美女精品久久久久∴| 欧美日韩成人综合天天影院| 性一交一乱一区二区洋洋av| 麻豆精品一区二区av白丝在线| 亚洲欧美日韩国产综合| 久久久.com| 午夜久久久久| 欧美激情小视频| 久久中文字幕一区| 国产精品美女www爽爽爽| 欧美一区三区二区在线观看| 免费观看一区| 欧美高潮视频| 国产乱码精品一区二区三区五月婷 | 午夜欧美电影在线观看| 黄色小说综合网站| 99国产欧美久久久精品| 亚洲国产色一区| 一本色道久久综合亚洲二区三区| 亚洲电影免费观看高清完整版| 欧美一区二区三区免费看| 99精品国产一区二区青青牛奶| 久久久久久久激情视频| 一区二区日韩欧美| 欧美亚州韩日在线看免费版国语版| 欧美韩日视频| 亚洲手机成人高清视频| 欧美午夜免费| 中文国产亚洲喷潮| 老司机免费视频一区二区三区| 欧美日韩亚洲激情| 一本色道久久综合一区 | 亚洲影视在线播放| 亚洲亚洲精品在线观看| 欧美激情在线播放| 亚洲福利视频一区二区| 亚洲高清视频在线观看| 久久九九久久九九| 美国成人直播| 影音先锋亚洲精品| 久久精品主播| 欧美成人精品高清在线播放| 国产伦精品一区二区三区免费迷| 99re热这里只有精品免费视频| 亚洲国产日韩欧美| 欧美国产精品中文字幕| 亚洲精品在线观| 亚洲欧美色婷婷| 国产精品区二区三区日本| 久久一区免费| 亚洲国产精品va在看黑人| 亚洲视频播放| 欧美性理论片在线观看片免费| 亚洲美女黄网| 久久久久久久999精品视频| 一区二区三区在线不卡| 免费亚洲一区| 亚洲激情视频网| 久久一区视频| 亚洲一区bb| 一区三区视频| 亚洲国产精品一区二区www在线| 欧美jjzz| 久久综合中文色婷婷| 亚洲黄色在线观看| 欧美sm视频| 欧美在线高清视频| 欧美一区二区三区四区在线观看地址| 亚洲国产精彩中文乱码av在线播放| 久久一日本道色综合久久| 先锋亚洲精品| 国产一区av在线| 国产精品高清免费在线观看| 欧美日韩精品免费观看视一区二区| 久久综合精品一区| 亚洲香蕉伊综合在人在线视看| 免费成人黄色片| 久久精品国产免费观看| 亚洲欧美www| 一本久久综合亚洲鲁鲁五月天| 亚洲国产欧美一区二区三区丁香婷| 国际精品欧美精品| 伊人久久婷婷| 国产日韩欧美一区在线| 国产欧美一区二区三区另类精品| 国产精品免费视频观看| 国产午夜精品久久久久久免费视| 欧美日本韩国一区二区三区| 亚洲永久在线观看| 午夜精品电影| 久久久久欧美| 欧美日韩免费网站| 欧美日韩中文字幕在线视频| 欧美日韩亚洲一区二区三区在线| 久久综合给合| 欧美高清在线观看| 国产精品欧美激情| 亚洲电影在线看| 亚洲视频在线观看| 亚洲国产精品免费| 亚洲午夜精品久久| 欧美亚洲综合在线| 久久综合久久88| 欧美日韩亚洲综合| 国产精品永久免费观看| 欧美一区二区三区在线观看 | 亚洲一区二区三区高清| 欧美激情一区二区三区成人| 亚洲欧美高清| 欧美成人自拍| 在线欧美日韩| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲一区bb| 欧美日韩人人澡狠狠躁视频| 尤物视频一区二区| 久久久五月婷婷| 亚洲国产天堂久久综合| 久久人人爽人人| 红桃视频成人| 久久久91精品国产一区二区精品| 亚洲欧美日韩专区| 国产曰批免费观看久久久| 亚洲欧美日韩天堂| 在线视频日韩精品| 国产日本欧美一区二区| 亚洲精品精选| 久久久久久成人| 99国产精品国产精品毛片| 狂野欧美一区| 久久精品盗摄| 日韩一级大片在线| 亚洲国产精品久久久久秋霞蜜臀 | 一本色道婷婷久久欧美| 久久激情综合网| 欧美成人黑人xx视频免费观看 | 欧美日韩中文| 亚洲午夜日本在线观看| 久久精品91久久香蕉加勒比| 国产专区欧美专区| 亚洲乱码国产乱码精品精天堂| 欧美韩国日本综合| 亚洲一区二区成人在线观看| 亚洲人成网在线播放| 国产精品久久9| 亚洲男人的天堂在线| 亚洲欧美文学| av不卡在线观看| 久久久久在线观看| 欧美亚洲视频一区二区| 久久久噜噜噜久久| 欧美黄色免费| 国产精品男gay被猛男狂揉视频| 久久久综合网| 国产精品激情电影|