我有基類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