1

在python中,我可以将对函数的引用传递给类,然后通过调用具有所需参数的类变量来再次使用它。如下:

def add_together(a, b):
    return a + b

class Function:
    def __init__(self,action,name,num_inputs=2,num_outputs=1):
        self.action      = action
        self.num_inputs  = num_inputs
        self.num_outputs = num_outputs
        self.name        = name
        self.f_type      = True

    def solve(self,*args):
        return self.action(*args)

f = Function(add_together,"'add'")
print f.action(3,5)   

我正在将代码移动到 c++ 以提高速度,但对 C++ 了解不多,我在找出如何实现相同目标时遇到了一些麻烦。请参阅下面的(弱)尝试。我热衷于保持逻辑尽可能相似。

我想知道两件事,

  1. 如何将函数的引用传递给类?
  2. 我相信 c++ 中的 *args 可以通过重载来工作,但我不确定如何加载和卸载变量。

我知道一些基本问题,但我很难用谷歌解决。

在 C++ 中的尝试

double add_together(double a, double b) {
    return a + b;
}

class Function {
public:
    Function(int ni, double act) {
        int num_inputs = ni;
        double action = act;


    }
protected:
    int num_inputs;
    double action;
};

Function f(2,add_together);
4

1 回答 1

3

函数指针似乎是您正在寻找的。开头的 typedef 不是必需的,但它确实简化了语法。

typedef double (*function_ptr)(double, double);

double add_together(double a, double b) {
    return a + b;
}

class Function {
public:
    Function(int ni, function_ptr act) {
        num_inputs = ni;
        action = act;
    }
protected:
    int num_inputs;
    function_ptr action;
};

Function f(2,add_together);

您的构造函数中也有错误。您在构造函数中重新定义了成员变量num_inputsaction局部变量。我不认为你想那样做。

于 2012-10-18T13:37:44.823 回答