选择一种类的风格来在运行时实现一个函数?

时间:2010-09-20 17:02:11

标签: c++ inheritance multiple-inheritance

我想将数据和功能描述发送到远程站点。在远程站点接收到数据后,我想查看描述并创建一个对象(通过工厂方法),当我在其上调用exec时,完全按照我想要的方式执行操作。

示例:

1)发送[3,(add 5)] =>接收(OBJ); obj-> exec() - > 8

2)发送[3,(add -1,mult 2)] =>接收(OBJ); obj-> exec() - > 4

我想过以某种形式的多重继承使用adder和multer类,但是无法弄清楚任何内容,因为这涉及从不同的功能排列中创建大量的类。我想我需要学习一些东西:)模板?我主要担心的是exec()函数中的零条件也很容易添加新的功能。

感谢

1 个答案:

答案 0 :(得分:0)

你说你不想为不同的能力排列建立单独的类,我同意。但是你能否将你的“能力”分成一组原子操作和另一组组合器。如果它们都来自一个共同的'executor'对象,使用虚拟的'exec'方法,那可能就是这个伎俩:

class executor {
  public:
  virtual double exec();
};

class constant_exec : public executor {
  public:
  constant_exec(double value) : m_value(value) {}
  double exec() {return m_value;}
  private:
  double m_value;
};

class add_op : public executor {
  public:
  add_op(executor const *lhs, executor const* rhs) : m_lhs(lhs), m_rhs(rhs){}
  double exec() {return rhs->exec + lhs->exec;}
  private:
  executor const* m_rhs, m_lhs;
};
  ... and so on

通过这种方式,您可以构建任意复杂的操作。您确实需要担心正确处理执行程序对象,因此您可能希望考虑使用共享(可能是弱)指针,尽管这会对性能产生轻微影响。

-matt