怎么将一组基本函数组成一个任意的函数序列


如何将一组基本函数组成一个任意的函数序列?
定义好一组基本动作函数: 
MoveStraight();
TurnAround();
Stand(); 

然后要根据具体的任务要求组成一个动作序列,比如:
MoveStaight1m/s --> Stand --> TurnAround+90 --> MoveStraight_2m/s

C++应该怎么实现?要软编码的,不能硬编码,因为动作序列会根据实际任务要求的改变而改变。

之前考虑了一下函数指针,但是用什么容器能存储一组不同类型的函数指针呢?每个基本函数的类型都是不一样的。帮帮忙阿,这是我的燃眉之急阿

C++/VC 程序开发 数组

油条要沾酱油 10 years, 11 months ago


在一楼给出的代码中,还可以这样修改代码,让key变得更有意义:

  C/C++ code

  #include <iostream> #include <string> #include <map> using namespace std; // 3个函数可能要用到的参数,全都封装到一个struct对象里面。 // 以保证3个函数在形式上保持一致。 typedef struct fun_parameter { double velocity; // in meters per second double angle; // in degree double time; // in second fun_parameter(double velocity = 0.0, double angle = 0.0, double time = 0.0) { this->velocity = velocity; this->angle = angle; this->time = time; } }FP; void MoveStraight(const FP& fp) { cout << "MoveStraight at speed of " << fp.velocity << " m/s" << endl; } void TurnAround(const FP& fp) { cout << "TurnAround at angle of " << fp.angle << " degree" << endl; } void Stand(const FP& fp) { cout << "Stand for " << fp.time << " seconds." << endl; } typedef void (*pFun)(const FP&); int main(int argc, char* argv[]) { map<string, pFun> fun_map; fun_map.insert(pair<string, pFun>("MoveStraight", MoveStraight)); // 用string作为key更有意义 fun_map.insert(pair<string, pFun>("TurnAround", TurnAround)); fun_map.insert(pair<string, pFun>("Stand", Stand)); // 现在假定在某种情况下,三个函数的运行顺序是Stand->MoveStraight->TurnAround fun_map.find("Stand")->second(FP(0, 0, 10)); fun_map.find("MoveStraight")->second(FP(3, 0, 0)); fun_map.find("TurnAround")->second(FP(0, 90, 0)); return 0; }

alazif answered 10 years, 11 months ago

Your Answer