我有基类DataProcessor
。它是一些坐标系统中位置计算器的基类。因此,例如,它可以具有如下的后代:SphericDataProcessor
,CartesianDataProcessor
。基类为CookedDataCatalogue
,它是某些对象位置的容器的基类。因此,每个DataProcessor
应该能够将其数据输入到每个CookedDataCatalogue
。我可以想像这样的事情:派生类依赖函数
class CookedDataCatalogue
{
virtual void Transform(DataProcessor* dp) = 0;
virtual void PutData(???) = 0;
}
class CookedDataCatalogue1 : public CookedDataCatalogue
{
void Transform(DataProcessor* dp) override
{
dp->TransformTo(this);
}
}
class CookedDataCatalogue2 : public CookedDataCatalogue
{
...
}
class CookedDataCatalogue3 ...
class DataProcessor
{
virtual void Process() = 0;
virtual void TransformTo(CookedDataCatalogue1* c) = 0;
virtual void TransformTo(CookedDataCatalogue2* c) = 0;
virtual void TransformTo(CookedDataCatalogue3* c) = 0;
}
但我不喜欢它。首先void Transform(DataProcessor*)
从基类迁移到所有孩子**。其次,如果我将它构建为库,其他用户不能添加他自己的CookedDataUserCatalogue
,因为他不能添加另一个void TransformTo(CookedDataUserCatalogue)
。第三,我不知道如何编写函数PutData()
,因为每个目录使用他自己的数据来包含。它应该模板化吗?
什么是解决方案?有没有我错过的编程模式?
在网上搜索“double dispatch pattern C++”。 –
我错了:不是煮熟的多余!?您只需要一个'DataProcessorInterface' –
目录可以由其他人提供,并且DataProcessor不仅可以放入数据,还可以在其中进行搜索。 – DoctorMoisha