C ++代理类

时间:2011-04-19 15:32:41

标签: c++ design-patterns

有没有办法在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有很多方法,我想捕获传输异常,用空结果响应,并在下一个方法调用之前重新建立连接。

3 个答案:

答案 0 :(得分:3)

如果你指的是通过反射之类的东西自动生成的东西,没有。实现简单代理的一种常用方法是覆盖代理类的operator->。如果您在代理中需要执行的任何操作都可以在此时完成,则此方法有效。这项技术在GoF的“设计模式”中,在实施部分下。

编辑(根据您的附加信息):如果您想在每次通话前做一些事情,operator->()重载机制适用于此。在每次调用之后做一些事情并不像自动化那么容易,但我可以想象一些东西是由一个特殊的返回对象构建的,它在它被破坏时调用它。

答案 1 :(得分:1)

这可能对http://www.stroustrup.com/wrapper.pdf有帮助,但我认为不可能以这种方式处理异常。

答案 2 :(得分:0)

我不确定派生是代理模式的最佳设计。 您的帖子可能已过期,但我有一个示例版本的Proxy Pattern来保护数组和STL容器元素access here. 它使用模板编程和最后的C ++ 17功能:演绎指南!