-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();
}

我应该在这里使用哪种模式?在 StaticPlot 类中添加一个空的 update_real_time() 方法似乎不是一个好的解决方案。

编辑:上面的代码不是真实的。我只是为了告诉我的问题而写它,认为这是一个伪代码。我懒得写访问限定符。在我的真实代码中,我没有私有继承或切片问题。我将实例的指针保存在向量中。抱歉,误解了。无论如何,我正在修复它。

4

1 回答 1

1

You would need to use dynamic_cast:

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

Except that foreach is not C++, so you would have to use real code for that too.

于 2013-08-03T23:08:44.990 回答