私はラッパーを書くために、BaseとDerivedの2つのクラスを持っています。 Derivedには、Baseに存在しない追加の機能が含まれています。これらのクラスは私のコントロール外にあり、変更することはできません。ベースクラスと派生クラスの両方のラッパー(アダプタ)を作成するにはどうすればよいですか?
問題は次のとおりです。どのようにしてa)キャストするかb)重大なコードの重複がなくとも両方のクラスをラップできますか?
ここで鋳造してソリューションです:
class BaseWrapper {
Base b;
someFunction() {
b.someFunction();
}
}
class DerivedWrapper : BaseWrapper {
someOtherFunction() {
((Derived) b).someOtherFunction();
}
}
はここで重複して一つだ:
class BaseWrapper {
Base b;
someFunction() {
b.someFunction();
}
}
class DerivedWrapper {
Derived d;
someFunction() {
d.someFunction();
}
someOtherFunction() {
d.someOtherFunction();
}
}
私は2番目に最初のソリューションを好む、しかし確実にもっと良いものがなければならない...
私はあなたの答えが好きで、私は多少イライラだ私はすぐにそれを考えなかった。私はそこに良い方法があるとは思わない。あなたはコンストラクタにキャストする必要はありません。 – iansimon
それは本当です。それでも暗黙のキャストよりも明示的なキャストが好きです。私は私の答えでそれをメモします。 – chroipahtz