当前位置: 首页 > news >正文

邯郸外贸网站建设公司天安节能科技园公司做网站

邯郸外贸网站建设公司,天安节能科技园公司做网站,国外域名查询,网站背景自动切换转自:https://www.cnblogs.com/qicosmos/archive/2013/04/07/3003480.html #xff08;原创#xff09; C 轻量级AOP框架 c11 boost技术交流群#xff1a;296561497#xff0c;欢迎大家来交流技术。 c中开源的AOP框架AspectC需要单独编译才能将切面的代码织入到核心逻辑代码… 转自:https://www.cnblogs.com/qicosmos/archive/2013/04/07/3003480.html 原创 C 轻量级AOP框架 c11 boost技术交流群296561497欢迎大家来交流技术。 c中开源的AOP框架AspectC需要单独编译才能将切面的代码织入到核心逻辑代码中感觉使用起来不方便不能满足快速开发要求。我希望只要实现方法拦截即可能织入before()和after()操作就行不追求动态织入。思路是这样的通过一个包装类里面定义before()和after()方法和-运算符重载方法在重载操作函数中实现before()和after()操作。具体代码如下 1 #include boost/shared_ptr.hpp2 3 template typename WrappedType, typename DerivedAspect4 class BaseAspect5 {6 protected:7 WrappedType* m_wrappedPtr; //被织入的对象8 9 //获取派生的切面对象 10 DerivedAspect* GetDerived() 11 { 12 return static_castDerivedAspect*(this); 13 } 14 15 //被织入对象的删除器用来自动触发切面中的After方法 16 struct AfterWrapper 17 { 18 DerivedAspect* m_derived; 19 AfterWrapper(DerivedAspect* derived): m_derived(derived) {}; 20 void operator()(WrappedType* p) 21 { 22 m_derived-After(p); 23 } 24 }; 25 public: 26 explicit BaseAspect(WrappedType* p) : m_wrappedPtr(p) {}; 27 28 29 void Before(WrappedType* p) { 30 // Default does nothing 31 }; 32 33 void After(WrappedType* p) { 34 // Default does nothing 35 } 36 37 //重载指针运算符用来织入切面Before和After 38 boost::shared_ptrWrappedType operator-() 39 { 40 GetDerived()-Before(m_wrappedPtr); 41 return boost::shared_ptrWrappedType(m_wrappedPtr, AfterWrapper(GetDerived())); 42 } 43 }; 44 45 //织入切面的工厂函数, 返回包含被织入对象的切面 46 template template typename class Aspect, typename WrappedType 47 AspectWrappedType MakeAspect(WrappedType* p) 48 { 49 return AspectWrappedType(p); 50 } BaseAspect为切面的基类提供了Before()和After()方法供派生的切面实现   下面看看具体的切面实现一个实现对函数运行时间的统计一个实现日志功能。 1 #include iostream2 #include boost/chrono/chrono.hpp3 #include boost/chrono/system_clocks.hpp4 5 templatetypename WrappedType6 class TimeElapsedAspect : public BaseAspect WrappedType, TimeElapsedAspectWrappedType 7 {8 typedef BaseAspectWrappedType, TimeElapsedAspectWrappedType BaseAspect;9 typedef boost::chrono::time_pointboost::chrono::system_clock, boost::chrono::durationdouble time_point; 10 11 time_point m_tmBegin; 12 public: 13 TimeElapsedAspect(WrappedType* p): BaseAspect(p) {} 14 15 16 void Before(WrappedType* p) 17 { 18 m_tmBegin boost::chrono::system_clock::now(); 19 } 20 21 void After(WrappedType* p) 22 { 23 time_point end boost::chrono::system_clock::now(); 24 25 std::cout Time: (end-m_tmBegin).count() std::endl; 26 } 27 }; TimeElapsedAspect切面实现对函数运行时间统计。   1 template typename WrappedType2 class LoggingAspect : public BaseAspectWrappedType, LoggingAspectWrappedType 3 {4 typedef BaseAspectWrappedType, LoggingAspectWrappedType BaseAspect;5 public:6 LoggingAspect(WrappedType* p): BaseAspect(p) {}7 8 void Before(WrappedType* p) 9 { 10 std::cout entering std::endl; 11 } 12 13 void After(WrappedType* p) 14 { 15 std::cout exiting std::endl; 16 } 17 18 }; LoggingAspect实现日志记录   现在来看看测试代码 class IX { public:IX(){}virtual ~IX(){}virtual void g()0; private:};class X : public IX { public:void g() {std::cout it is a test std::endl;}};void TestAop() {boost::shared_ptrIX p(new X());MakeAspectTimeElapsedAspect(p.get())-g();MakeAspectLoggingAspect(p.get())-g(); }  测试结果 总结 这个简单的AOP实现可以实现对类的方法进行拦截具体切面自由定制不过还有个地方不太完善还不支持切面的组合这个可以用TypeList去实现。 一点梦想尽自己一份力让c的世界变得更美好
http://www.pierceye.com/news/859861/

相关文章:

  • 外国做问卷可以赚钱的网站做中国菜的外国网站
  • 青岛市建设厅网站快递网站建设
  • 昆明网站WordPress文章怎么折叠
  • 拖拽建站系统源码企业主题展厅设计公司
  • asp.net网站的数据库配置张家港网站 设计制作
  • 聊城手机网站建设多少钱扬州网站建设哪个好薇
  • 云南安宁做网站的公司手机网页制作软件中文版
  • 如何做征信公司网站做谷歌推广一定要网站吗
  • 重庆市做网站的公司有哪些苏州网站建设设计公司
  • 网站制作计算机域名解析到网站
  • 自己做的电影网站打开很慢wordpress 防采集
  • 西安专业网站建设公司排名做网站编写
  • 做电影网站还能赚钱云南网站建设哪家公司好
  • 重庆定制网站开发什么是网络营销战略
  • 网站建设硬件方案精准客源app
  • 网站视觉优化怎么做电子商务网站建设参考文献2018
  • 服务器可以吧网站做跳转吗wordpress 远程图片本地化
  • 网站在线访谈栏目建设个人网站可以备案了吗
  • 汉口北做网站搜索广告是什么
  • 电商网站可以用dw做嘉兴网站建设平台
  • 做网站是数据库应该放在哪里建筑工程水平防护网
  • vps网站无法通过ip访问网站怎么做的支付宝接口
  • 怎么创建一个博客网站网站的c4d动画是怎么做的
  • 西安做企业网站科技论文发表网
  • html 手机网站开发企业做网站的合同
  • 建立wordpress网站吗全州建设完小网站
  • 网站域名注册证书是什么制作WordPress友情链接
  • 如何在解决方案中新建网站html网页制作的软件下载
  • 企业网站怎么做优化开小加工厂去哪接单子
  • 网站建设推广费怎么做账域名和网站绑定