Iva*_* G. 7 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 }
}
Run Code Online (Sandbox Code Playgroud)
这是场景.我想要代理的类(base_class)执行远程调用,但是当网络关闭时,它将抛出从std :: exception派生的传输异常.base_class有很多方法,我想捕获传输异常,以空结果响应,并在下一个方法调用之前重新建立连接.
如果您的意思是通过反射等自动生成的东西,则不是。实现简单代理的一种常见方法是重写operator->代理类的 。如果您需要在代理中执行的任何操作都可以在那时完成,则此方法有效。该技术位于 GoF 的“设计模式”中的“实现”部分。
编辑(根据您的附加信息):如果您想在每次调用之前执行某些操作,则operator->()重载机制非常适合此操作。每次调用后执行某些操作并不容易自动化,但我可以想象用一个特殊的返回对象构建的东西,该对象在销毁时调用它。
| 归档时间: |
|
| 查看次数: |
1309 次 |
| 最近记录: |