私は、いくつかのデータが関連付けられているいくつかのメンバーメソッド、具体的にはロボットのどの機械システムを使用する必要があるかを知りたいクラスを書いています。私はそれらを次のようなファンクターとして書くことができると思いました (これは私の実際のコードではありません):
class MyRobot : public Robot {
public:
MyRobot();
void runRobot();
private:
Command do_something_,
do_another_thing_;
}
そして、次do_something_
のようにコンストラクターでラムダで初期化します。
do_something_( [] {
do_first_thing();
do_second_thing();
} );
次に、do_something_
どのような要件があるかを伝えます。
do_something_.requires( system_a );
do_something_.requires( system_b );
そしてrunRobot()
、ロボットのスケジューラにコマンドを実行するように指示します。
void MyRobot::runRobot() {
scheduler.add(do_something_);
scheduler.add(do_another_thing_);
}
しかし、コマンドの数が増えるにつれて、MyRobot
すべてのコマンドに本体が定義されているため、コンストラクターの管理が難しくなることに気付きました。各コマンドに対応するプライベート メソッドを作成し、ラムダの代わりに関数ポインターで初期化することもできますが、それはもっと複雑に思えます。また、特定のコマンドごとにサブクラス化Command
して、本体と要件をそれぞれ別のファイルに入れることもできますが、かなり単純なタスクの場合、かなりのオーバーヘッドのように感じます。私が気づいていないこれを行う良い方法はありますか?