2011-04-19 26 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