gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:18:53 33 4
gpt4 key购买 nike

首先,我要声明我不是 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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com