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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |