有什么方法可以轻松地在 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 有很多方法,我想捕获传输异常,以空结果响应,并在下一个方法调用之前重新建立连接。
最佳答案
如果您指的是通过反射之类的东西自动生成的东西,则不是。实现简单代理的一种常见方法是覆盖代理类的 operator->
。如果你需要在代理中做的任何事情都可以在那个时候完成,这就有效。该技术在 GoF 的“设计模式”中,在实现部分下。
编辑(根据您的附加信息):如果您想在每次调用之前做一些事情,operator->()
重载机制很适合这个。在每次调用后做一些事情并不容易自动化,但我可以想象一些东西是用一个特殊的返回对象构建的,在它析构时调用它。
关于C++代理类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5718901/