我正在做一个线性遗传程序设计项目,其中程序是通过自然进化机制进行繁殖和进化的.他们的“ DNA”基本上是一个容器(我已经成功使用了数组和向量),其中包含指向一组可用函数的函数指针.
现在,对于简单的问题,例如数学问题,我可以使用一个类型定义的函数指针,该指针可以指向全部返回一个double且所有参数都取为double的函数.
不幸的是,这不是很实际.我需要有一个容器,该容器可以具有不同种类的函数指针,例如指向不带参数的函数的函数指针,或带一个参数的函数或返回某些东西的函数,等等(您得到了理念)…
有没有办法使用任何一种容器来做到这一点?
我是否可以使用包含多态类的容器来做到这一点,而多态类又具有各种功能指针?
我希望有人可以引导我寻求解决方案,因为重新设计到目前为止我所做的一切都会很痛苦.
解决方法:
虚拟机的典型想法是拥有一个单独的堆栈,该堆栈用于传递参数和返回值.
您的函数仍然可以全部为void fn(void)类型,但是您需要手动进行参数传递和返回.
您可以执行以下操作:
class ArgumentStack {
public:
void push(double ret_val) { m_stack.push_back(ret_val); }
double pop() {
double arg = m_stack.back();
m_stack.pop_back();
return arg;
}
private:
std::vector<double> m_stack;
};
ArgumentStack stack;
…所以一个函数可能看起来像这样:
// Multiplies two doubles on top of the stack.
void multiply() {
// Read arguments.
double a1 = stack.pop();
double a2 = stack.pop();
// Multiply!
double result = a1 * a2;
// Return the result by putting it on the stack.
stack.push(result);
}
可以通过以下方式使用:
// Calculate 4 * 2.
stack.push(4);
stack.push(2);
multiply();
printf("2 * 4 = %f\n", stack.pop());
你遵循吗?