加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的动态代理类.可能吗?

发布时间:2020-12-16 07:02:13 所属栏目:百科 来源:网络整理
导读:首先,让我说我不是一个大师C程序员.我有几年的C经验,但我的主要领域是.NET / C#. 我正在研究一种在C中创建动态代理/包装类的方法.特别是,我想要实现的是拦截方法调用.这种技巧在Java / .NET世界中很常见,但C缺乏Reflection. 我找到了一个online tutorial,它
首先,让我说我不是一个大师C程序员.我有几年的C经验,但我的主要领域是.NET / C#.

我正在研究一种在C中创建动态代理/包装类的方法.特别是,我想要实现的是拦截方法调用.这种技巧在Java / .NET世界中很常见,但C缺乏Reflection.

我找到了一个online tutorial,它解释了如何通过 – >创建包装和拦截方法调用.运算符重载:

class Person{
  std::string mName;
  Person(std::string pName): mName(name){}
  void printName(){
     std::cout << mName << std::endl;
  }

};

template <class T >
class Wrap {
     T * p ;
     public:
             Wrap (T * pp ) :p (pp) { }
             Call_proxy <T> operator ->() {
                   prefix ();
                   return Call_proxy<T>(p);
             }
};
template <class T >
class Call_proxy {
       T * p ;
       public :
              Call_proxy (T * pp ) :p (pp ){ }
              ?Call_proxy () {
                     suffix ();
               }
               T * operator ->() {
                          return p ;
                }
 };

从这个示例中可以看出,我们可以在调用之前和之后捕获方法调用事件,但对我来说不清楚的是如何检测调用哪个方法?有可能吗?

谢谢

UPDATE

好吧,为了使事情更加清晰,我并不关心实施是否真正有活力.有一个类似于智能指针的包装类对我来说很好.

解决方法

不.这是专门设计为非侵入性的,所有包装器都有助于调用前缀和后缀,然后返回被引用的对象,以便它可以调用指定的函数.如果 – >运算符被重载然后,object-> function()被扩展为object.operator->() – > function().

这是Stroustrup写的文章的链接,它的内容非常丰富http://www.stroustrup.com/wrapper.pdf

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读