假设我有这个基类:
struct Vehicle {
//"op" stands for the operator of the vehicle
//examples: pilot, truck driver, etc.
virtual void insert_op(Op op) = 0;
//other members...
};
而这两个子类
struct Truck : public Vehicle {
void insert_op(Op op) override {
//prepare Truck with truck driver
}
};
struct Airplaine : public Vehicle {
void insert_op(Op op) override {
//prepare Airplaine with pilot
}
};
如您所料,这是另一个层次结构:
struct Op {};
struct TruckDriver : public Op {};
struct Pilot : public Op {};
你已经看到问题了,不是吗?我想强制卡车只接受卡车司机和强制飞机只接受飞行员,但这在当前设计中是不可能的。C++ 不允许被覆盖的虚拟变量的 diff 参数。
我想我可以在 insert_op 的每个子类实现中对“Op”的类型进行运行时类型检查,但这听起来是一个非常丑陋的解决方案,而且它在编译时没有强制执行。
有什么出路吗?