我想将数据和功能描述发送到远程站点。在远程站点接收到数据后,我想查看描述并创建一个对象(通过工厂方法),当我在其上调用exec时,完全按照我想要的方式执行操作。
示例:
1)发送[3,(add 5)] =>接收(OBJ); obj-> exec() - > 8
2)发送[3,(add -1,mult 2)] =>接收(OBJ); obj-> exec() - > 4
我想过以某种形式的多重继承使用adder和multer类,但是无法弄清楚任何内容,因为这涉及从不同的功能排列中创建大量的类。我想我需要学习一些东西:)模板?我主要担心的是exec()函数中的零条件也很容易添加新的功能。
感谢
答案 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