私はA
とB
の2種類のクラスを持っています。これはOperator
クラスのサブクラスで、operate()
メソッドを持っています。継承またはテンプレートを使用した特別なケースの振る舞い
class Operator {
// ...
virtual void operate() = 0;
};
class A : public Operator {
void operate() { /* ... */ }
};
class B : public Operator {
void operate() { /* ... */ }
};
私は2つの操作を実行するクラスを作成したいのですが、両方の操作がタイプB
であるときに独特の振る舞いを持っています。何かのように
class DoubleOperator {
Operator* operator1;
Operator* operator2;
// ...
public:
void operateTwice() {
if (/* operator1 and operator2 are of type B */) {
// Do a special combined operation.
} else { // Otherwise, do the operations separately.
operator1->operate();
operator2->operate();
}
}
};
この動作を生成するために継承またはテンプレートを使用する簡単な方法はありますか?
をおそらく 'DoubleOperator'は' Operator'オブジェクトへのポインタまたは参照を持っている - それができます抽象型のメンバーを持っています。 – aschepler
そうです。私はそれを更新します。 – ech
[double dispatch](https://en.wikipedia.org/wiki/Double_dispatch)が必要なのでしょうか? – kfsone