本次要講的時候如何改進**模式,具體來說是動態**模式,動態**模式一般實現aop框架,不懂aop的童鞋看這裡。我前面的博文也實現了乙個aop框架(可以參考我前面的博文:(原創) c++ 輕量級aop框架),但是那個aop框架存在乙個缺陷,就是不支援切面的組合,這一點大大降低了其通用性,本次通過c++11改進,使aop框架更完善:支援切面組合,不要求切面必須派生於某個基類,不用虛函式呼叫,效能更好,功能更強大。
上**:
struct切面有要求,切面類中必須要有before/after方法,否則編譯不過,允許空實現。aspect : boost::noncopyable
template
void invoke(t&&value)
template
void invoke(head&& head, tail&&... tail)
private
: std::function
m_func;
};template
void invoke(const std::function&f)
測試**:
struct測試結果:aa
void
after()
};struct
bb
void
after()
};struct
cc
void
after()
};struct
tt
void h(int
a)
};struct
dd
void
after()
};void
gt()
void ht(int
a)void
testaop()
); //
織入成員函式
invoke([&tt]()); //
織入物件
int aa = 3
; invoke
(>); //
織入方法
invoke([aa]());//
織入帶參的方法
//織入帶引數的成員函式和物件
std::function ff1 = std::bind(&tt::h, &tt, std::placeholders::_1);
invoke
([&ff1,aa]()); //
組合了四個切面
invoke([&tt,aa]());
}
更新:**在gcc下編譯沒問題,但在vs2013下編譯不過,是微軟的bug,如果要在vs2013下編譯通過,需要做一點修改:
templateusing identity_t =t;一點夢想:盡自己乙份力,讓c++的世界變得更美好!template
void invoke(const std::function&f)
aop 面向切面程式設計
起源 研究人員就對物件導向思想的侷限性進行了分析。他們研究出了一種新的程式設計思想,借助這一思想或許可以通過減少 重複模組從而幫助開發人員提高工作效率。隨著研究的逐漸深入,aop也逐漸發展成一套完整的程式設計思想,各種應用aop的技術也應運而生。aop思想 定義乙個切面,在切面的縱向定義處理方法,處...
AOP面向切面程式設計
1 概念 面向切面程式設計,通過預編譯方式和執行期動態 實現程式功能的統一維護的一種技術。aop是oop的延續,利用aop可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率 2 作用 1.解耦,將通用性的功能模組 與業務 解耦 ioc專...
AOP 面向切面程式設計
aop aspect oriented programming 即面向切面程式設計,可以說是oop object oriented programming 物件導向程式設計的補充和完善。面向切面程式設計是物件導向中的一種方式而已。在 執行過程中,動態嵌入其他 叫做面向切面程式設計。常見的使用場景 日...