私はラッパークラスを持っており、そのオブジェクトを関数に渡しています。あなたがあなたの関数をしたい場合はパラメータまたは関数としてのインターフェイスへの参照を渡す
class Interface
{
}
....
class wrapper:public Interface
...
fun(Interface& ob)
私はラッパークラスを持っており、そのオブジェクトを関数に渡しています。あなたがあなたの関数をしたい場合はパラメータまたは関数としてのインターフェイスへの参照を渡す
class Interface
{
}
....
class wrapper:public Interface
...
fun(Interface& ob)
場合Interface
アプローチが優れている:あなたはLiskov substitution principleに従うと、あなたはfun
からwrapper
の実装を非表示にするInterface
wrapper
を交換する将来的にできるようにしたい
fun
宣言の前に#wrapper.h
を#includeする必要はありません。それはインターフェースから抽象実装にInterface
で行くことに、しかし、また、あなたはすぐに十分なwrapper
以外Interface
とwrapper.h
のいずれかの実装を必要としないことを知っている、すなわち場合、およそ“not pay for what you don't use”原則を忘れてはいけない一般優れています#inclusionはあなたのプロジェクトでは問題ありませんInterface
となるでしょうover-design
:
fun(wrapper & ob)
かのようなラッパーによって継承される新しいインターフェイスにのようなクラスへの参照として渡す方が良いでしょう何
class wrapper
{
/// some functionality
}
wrapper
クラスのインスタンスのみを受け入れます。
fun(wrapper& ob)
または
fun(const wrapper& ob)
あなたはそれを変更する予定がない場合。あなたの関数は(ちょうどwrapper
Interface
から継承よりも多くのクラスがある場合にのみ便利)Interface
クラスを実装何かを受け入れる場合
、その後、使用:
fun(Interface& ob)
または
fun(const Interface& ob)
選択はユースケースによって異なります。
ラッパークラス2のパブリック関数である場合 クラスラッパー {public: fun1();fun2(); } しかし、私は関数funでfun1だけを使いたいです。インターフェースで指定する方が良いです。 –
@VladimirYanakievあなたが今日持っている特定の使用シナリオ( 'fun')ではなく、_interfaces_自体のデザインについて考えてみてください。 – mvidelgauz
「より良い」とはどういう意味ですか? –