首先,让我说我不是 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 ;
}
};
正如您从这个示例中看到的,我们可以在调用之前和之后捕获方法调用事件,但我不清楚的是如何检测正在调用哪个方法?有可能吗?
谢谢
更新
好吧,为了让事情更清楚,我真的不在乎实现是否真正动态。拥有一个类似于智能指针的包装类对我来说很好。