c++ - C++ 中的动态代理类。可能吗?

标签 c++ dynamic-proxy

首先,我要声明我不是 C++ 程序员大师。我有几年的 C++ 经验,但我的主要领域是 .NET/C#。

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

我找到了一个 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 ;
                }
 };

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

谢谢

更新

好吧,为了让事情更清楚,我真的不在乎实现是否真正是动态的。拥有类似于智能指针的包装类对我来说很好。

最佳答案

没有。这是专门为非侵入式设计的,包装器所做的只是方便调用前缀和后缀,然后返回被引用的对象,以便它可以调用指定的函数。如果 -> 运算符被重载,则 object->function() 会扩展为 object.operator->()->function()。

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

关于c++ - C++ 中的动态代理类。可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13454391/

相关文章:

c++ - 错误 : binary ">>" no operator found 的任何修复

c# - 创建一个 INotifyPropertyChanged 代理以将调用分派(dispatch)到 UI 线程

entity-framework - EF 4.0 动态代理 POCO 对象与目标类型不匹配

java - 将动态代理应用于应用程序中的所有类

java - 如何在反序列化时重新附加单例 Spring bean

c++ - 如果 constexpr 格式正确,这是在内部使用 static_assert 吗?

c++ - 堆栈上的构造函数/析构函数调用顺序

c++ - 如何在cocos2d-x中获取同一场景中的其他图层?

c++ - 如何在 C++ 中读/写 excel 复选框状态

namespaces - 在引用 NSubstitute 的程序集中使用 DynamicProxy 类型时如何修复 "type exists in both assemblies"故障?