Предположим, что у меня есть это базовый класс:Две иерархии связанных классов - наиважнейшие виртуальные функции
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 {};
Вы уже видите эту проблему, не так ли? Я хочу, чтобы FORCE Truck согласился только с TruckDrivers и FORCE airplaines принять только пилотов, но это невозможно в текущем проекте. C++ не разрешает параметры diff для переопределенных виртуальных машин.
Я предполагаю, что я мог бы выполнить проверку типа времени типа «Op» в каждой из подклассов реализаций insert_op, но это звучит как действительно уродливое решение, а также не применяется во время компиляции.
Какие-нибудь пути?
Скажете ли вы, что такие проверки времени выполнения распространены в хорошо разработанных программах на C++? – user2015453
Я не думаю, что видел иерархию классов, для которой нужны такие проверки. – Kos