以下のような2つのクラスがあります:
class Plot
{
protected:
virtual void plot() = 0;
}
class DynamicPlot : public Plot
{
public:
virtual void update_real_time();
virtual void plot();
}
class StaticPlot : public Plot
{
public:
virtual void plot();
}
そして、このようなコンテナ:
std::vector<Plot*> plot_vector;
plot_vector.append(new DynamicPlot());
plot_vector.append(new DynamicPlot());
plot_vector.append(new StaticPlot());
plot_vector.append(new StaticPlot());
インスタンスのタイプが DynamicPlot の場合、 update_real_time() を呼び出したいと思います。
foreach(Plot *plot, plot_vector)
{
if(/* plot type == DynamicPlot */)
{
plot->update_real_time();
}
plot->plot();
}
ここでどのパターンを使用する必要がありますか? 空の update_real_time() メソッドを StaticPlot クラスに追加することは、良い解決策とは思えません。
編集:上記のコードは本物ではありません。私は自分の問題を伝えるためにそれを書いただけで、それを疑似コードと考えてください。私はわざわざアクセス修飾子を書きませんでした。私の実際のコードでは、プライベートな継承やスライスの問題はありません。インスタンスのポインターをベクトルに保持します。誤解して申し訳ありません。とにかく直しています。