私がこの基本クラスを持っていると仮定します:
struct Vehicle {
//"op" stands for the operator of the vehicle
//examples: pilot, truck driver, etc.
virtual void insert_op(Op op) = 0;
//other members...
};
そして、これらの2つのサブクラス
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
}
};
ご想像のとおり、これはもう1つの階層です。
struct Op {};
struct TruckDriver : public Op {};
struct Pilot : public Op {};
あなたはすでに問題を見ていますね?トラックドライバーのみを受け入れるようにトラックを強制し、パイロットのみを受け入れるようにエアプレーンを強制したいのですが、これは現在の設計では不可能です。C ++では、オーバーライドされた仮想のdiffパラメーターは許可されていません。
insert_opの各サブクラス実装で「Op」タイプの実行時型チェックを実行できると思いますが、それは本当に醜い解決策のように聞こえますが、コンパイル時に強制されません。
何か方法はありますか?