首先,让我说我不是一个大师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 ;
}
};
从这个示例中可以看出,我们可以在调用之前和之后捕获方法调用事件,但对我来说不清楚的是如何检测调用哪个方法?它有可能吗?
由于
更新
好吧,为了使事情更清楚,我并不关心实施是否真正有活力。有一个类似于智能指针的包装类对我来说很好。
答案 0 :(得分:1)
没有。这是专门设计为非侵入性的,所有包装器都有助于调用前缀和后缀,然后返回被引用的对象,以便它可以调用指定的函数。如果 - >运算符被重载然后,object-&gt; function()被扩展为object.operator-&gt;() - &gt; function()。
这是Stroustrup写的论文的链接,它提供了非常丰富的信息http://www.stroustrup.com/wrapper.pdf