我正在做一个线性遗传程序设计项目,其中程序是通过自然进化机制进行繁殖和进化的。他们的“DNA”基本上是一个容器(我已经成功使用了数组和 vector ),其中包含指向一组可用函数的函数指针。
现在,对于简单的问题,例如数学问题,我可以使用一个类型定义的函数指针,该指针可以指向全部返回一个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());

你遵循吗?

关于c++ - 如何在C++中创建一个包含不同类型的函数指针的容器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4699018/

10-11 22:45
查看更多