我正在编写一个类,我希望有一些成员方法与它们相关联的一些数据,特别是它们需要使用的机器人的哪些机械系统。我想我可以把它们写成函子,像这样(这不是我的实际代码):
class MyRobot : public Robot {
public:
MyRobot();
void runRobot();
private:
Command do_something_,
do_another_thing_;
}
do_something_
然后在构造函数中使用 lambda进行初始化,例如:
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
将变得越难管理,因为每个命令都将在此处定义其主体。我可以为每个命令创建一个相应的私有方法,并使用函数指针而不是 lambda 来初始化它们,但这似乎更加复杂。我还可Command
以为每个特定命令进行子类化,从而将正文和要求放在一个单独的文件中,但这对于一个相当简单的任务来说感觉像是很多开销。有没有我不知道的好方法?