2016-08-17 10 views

答えて

1

場合Interfaceアプローチが優れている:あなたはLiskov substitution principleに従うと、あなたはfunからwrapperの実装を非表示にするInterface

  • を実装し、いくつかの他のクラスにwrapperを交換する将来的にできるようにしたい

    1. つまり、fun宣言の前に#wrapper.hを#includeする必要はありません。
    2. など。

    それはインターフェースから抽象実装にInterfaceで行くことに、しかし、また、あなたはすぐに十分なwrapper以外Interfacewrapper.hのいずれかの実装を必要としないことを知っている、すなわち場合、およそ“not pay for what you don't use”原則を忘れてはいけない一般優れています#inclusionはあなたのプロジェクトでは問題ありませんInterfaceとなるでしょうover-design

  • 3

    fun(wrapper & ob) 
    

    かのようなラッパーによって継承される新しいインターフェイスにのようなクラスへの参照として渡す方が良いでしょう何

    class wrapper 
    { 
    /// some functionality 
    } 
    

    wrapperクラスのインスタンスのみを受け入れます。

    fun(wrapper& ob) 
    

    または

    fun(const wrapper& ob) 
    

    あなたはそれを変更する予定がない場合。あなたの関数は(ちょうどwrapperInterfaceから継承よりも多くのクラスがある場合にのみ便利)Interfaceクラスを実装何かを受け入れる場合

    、その後、使用:

    fun(Interface& ob) 
    

    または

    fun(const Interface& ob) 
    

    選択はユースケースによって異なります。

    +0

    ラッパークラス2のパブリック関数である場合 クラスラッパー {public: fun1();fun2(); } しかし、私は関数funでfun1だけを使いたいです。インターフェースで指定する方が良いです。 –

    +0

    @VladimirYanakievあなたが今日持っている特定の使用シナリオ( 'fun')ではなく、_interfaces_自体のデザインについて考えてみてください。 – mvidelgauz

    関連する問題