微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

首先,让我说我不是一个大师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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐