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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...