如何在相同的继承级别之间交换信息

时间:2012-05-26 20:27:44

标签: c++ inheritance

我面临的问题是在继承树的叶子之间交换信息,但是特定叶子只需要与其他特定叶子交换信息而不是所有现有叶子。 请查看以下(大大简化的)继承树和示例实现:

class station
{
virtual void transportOut(item* i, station *target) = 0;
virtual void transportIn(item* i, station *source) = 0;
};

class stationTransportOnly : public station
{
virtual void transportOut(item* i, station *target);
virtual void transportIn(item* i, station *source);
};

class stationTransportAndRotate : public station
{
virtual void transportOut(item* i, station *target);
virtual void transportIn(item* i, station *source);
};

transportOuttransportIn的示例实现可能如下所示:

void transportOut(item *i, station *target)
{
 target->transportIn(i, this);
 SendTransportOutCommandToRealMachine(i. target);
}

void transportIn(item *i, station *source)
{
 SendTransportInCommandToRealMachine(i. source);
}

电台如何处理传输(例如,哪些命令发送到真实的传送带,电台模型)是特定于电台的。这种方法运作良好多年,但现在需求发生了变化:有些站点需要比过去更需要同步运输。他们的运输命令中需要一个“任务ID”,对于输出站和输送站必须是相同的。该ID可能在transportOut中生成,但问题是如何将ID传输到传输站?

我可能只是扩展transportIn的界面,但由于只有少数现有的电台需要这个ID,所以它看起来很臃肿,设计不好。我想知道是否有更好的方法,或者如果他们从头开始设计这个,如何处理它。

提前致谢。

1 个答案:

答案 0 :(得分:0)

为什么该项目不能带有id属性?然后TransportOut可以设置该id,然后由TransportIn方法读取。

就像那样:

void transportOut(item *i, station *target)
{
    i->SetID(generateID());
    target->transportIn(i, this);
    SendTransportOutCommandToRealMachine(i, target);
}

void transportIn(item *i, station *source)
{
    int taskID = i->GetID();
    SendTransportInCommandToRealMachine(i, source);
}