有没有办法在C ++中轻松实现代理类模式?不使用AspectC ++或其他繁重的工具,只需内置宏或模板。
解释我想要的东西:
class base_class
{
public:
virtual void method_one() { ... }
virtual void method_two() { ... }
}
class class_proxy : base_class
{
protected:
void before_any_method_call() { do stuff };
void after_any_method_call(std::exception* ex) { do stuff }
}
以下是该方案。我想要代理的类(base_class)执行远程调用,但是当网络关闭时,它将抛出从std :: exception派生的传输异常。 base_class有很多方法,我想捕获传输异常,用空结果响应,并在下一个方法调用之前重新建立连接。
答案 0 :(得分:3)
如果你指的是通过反射之类的东西自动生成的东西,没有。实现简单代理的一种常用方法是覆盖代理类的operator->
。如果您在代理中需要执行的任何操作都可以在此时完成,则此方法有效。这项技术在GoF的“设计模式”中,在实施部分下。
编辑(根据您的附加信息):如果您想在每次通话前做一些事情,operator->()
重载机制适用于此。在每次调用之后做一些事情并不像自动化那么容易,但我可以想象一些东西是由一个特殊的返回对象构建的,它在它被破坏时调用它。
答案 1 :(得分:1)
这可能对http://www.stroustrup.com/wrapper.pdf有帮助,但我认为不可能以这种方式处理异常。
答案 2 :(得分:0)
我不确定派生是代理模式的最佳设计。 您的帖子可能已过期,但我有一个示例版本的Proxy Pattern来保护数组和STL容器元素access here. 它使用模板编程和最后的C ++ 17功能:演绎指南!