2011-04-19 23 views
7

有什么方法可以在C++中轻松实现代理类模式?不使用AspectC++或其他繁重的工具,只使用内置的宏或模板。C++代理类

解释我想要什么:

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

+1

如果您给我们一个想法,您想要使用它,我们会更容易为您提供相关建议。 – 2011-04-19 15:35:39

回答

3

如果你的意思是通过类似反射的东西自动生成的东西,不。实现简单代理的一种常见方式是覆盖代理类的operator->。如果您在代理中需要做的任何事情都可以在那时完成,那么这会起作用。这项技术在GoF的“实施”部分的“设计模式”中。

编辑(根据您的附加信息):如果您想在每次通话之前做某件事,operator->()过载机制对此很有效。在每次调用之后做些事情都不容易自动化,但我可以想象一些东西是从一个特殊的返回对象中构建出来的,当它被破坏时会调用它。

+0

好主意!我现在就给它一个 – 2011-04-19 15:38:40

+0

这是完美的方法调用之前执行代码,但我不知道如何调用后的代码,特别是如何将调用包装到我自己的try/catch块。 – 2011-04-19 16:17:14

+0

我可以按照你的建议使用一个特殊的返回对象来执行代码,并传给他一个方法的引用,但是我无法弄清楚这个调用是否失败 – 2011-04-19 16:19:09