我有一些类描述能力/行为,如飞行或驾驶等。每个类都有一个特定的方法,必须调用来加载一些数据 - 例如,Flyable有loadFlyData()
,Drivable有loadDriveData()
。对于每个类,方法名称都是唯一的。如何从基类派生的子类自动调用方法或生成代码?
我有许多派生类可能从一个或多个这些行为类继承。每个派生类都有一个名为loadData()
的方法,其中我们应该调用所有的父行为类方法,如loadFlyData()
,loadDriveData()
等....有没有一种方法可以使用元编程自动生成此方法?由于有许多派生类,如果我可以使用元编程生成这些方法,它可能更易于维护...
行为类:(一个对象类可能有这些行为中的任何一种,并且必须调用那些类“load “方法...
class Flyable {
void loadFlyData() {
}
};
class Drivable{
void loadDriveData() {
}
};
所有对象类从对象导出:
class Object {
virtual void loadData() {
}
};
派生类:
class FlyingCar : public Object, public Flyable, public Drivable {
virtual void loadData() override {
// How to automatically generate code so that the next two lines are called:
loadFlyData();
loadDriveData();
}
};
可以'loadFlyData()'和'loadDriveData'是同一个名字的?这样它们只能通过范围来区分,“Flyable :: loadData()'和'Drivable :: loadData()'?如果是这样,那么基于模板的方法来调用每个T :: loadData(),其中T是一个基类,应该可以工作。虽然不确定如何以可变参数的形式获取基类列表。 – themagicalyang
如果所有的基础对象对“加载”函数使用相同的名称(例如'loadData'),那么可以创建一个预处理步骤来获取源文件并对其进行修改。使用模板元编程可能是可能的,但它可能比它的价值更多的工作(并且你现在的解决方案将更少写,更重要的是更易于阅读和维护)。在运行时也可以创建代码,但这会更困难,并且会使其不易读和维护。你现在拥有的只是最好和最简单的解决方案。 –
是的,我们可以为loadFlyData和loadDriveData命名。对我来说(来自java背景)的困惑是如果他们有相同的名称(这就是为什么我使用不同的名称)如何处理冲突。下面给出的答案是我寻找的东西(由讲故事者和krzaq)。我不知道你可以在C++中做这些事情! –