首先,我要说的是我不是一位C++大师程序员。我有几年的C++经验,但我的主要领域是.NET/C#。
我正在研究一种在C++中创建动态代理/包装类的方法。特别是,我想实现拦截方法调用。这种技巧在Java/.NET世界中很常见,但C++缺乏反射。
我找到了一个在线教程,它解释了如何通过->运算符重载创建包装器并拦截方法调用:
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 ;
}
};
从这个示例中可以看出,我们可以捕获方法调用事件,在调用前和调用后进行捕获,但是对我来说不清楚的是如何检测到正在调用哪个方法?这是否可能?
谢谢
更新
好的,为了让事情更加清晰,我并不在乎实现是否真正动态。对我来说,拥有类似智能指针的包装器类就可以了。