-2

以下のような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 クラスに追加することは、良い解決策とは思えません。

編集:上記のコードは本物ではありません。私は自分の問題を伝えるためにそれを書いただけで、それを疑似コードと考えてください。私はわざわざアクセス修飾子を書きませんでした。私の実際のコードでは、プライベートな継承やスライスの問題はありません。インスタンスのポインターをベクトルに保持します。誤解して申し訳ありません。とにかく直しています。

4

1 に答える 1

1

使用する必要がありますdynamic_cast

foreach(Plot *plot, plot_vector)
{
    DynamicPlot* p = dynamic_cast<DynamicPlot*>(plot);
    if(p)
    { 
        p->update_real_time();
    }
    plot->plot();
}

ただし、それforeachは C++ ではないため、そのためにも実際のコードを使用する必要があります。

于 2013-08-03T23:08:44.990 に答える