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++ についてあまり知らないため、同じことを達成する方法を見つけるのに苦労しました。以下の (弱い) 試行を参照してください。ロジックをできるだけ似たものに保ちたいと思っています。

知りたいのは2点、

  1. 関数への参照をクラスに渡すにはどうすればよいですか?
  2. c++ の *args は、オーバーロードによって機能すると思いますが、変数をロードおよびアンロードする方法がわかりません。

基本的な質問は知っていますが、Google で解決するのに苦労しています。

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 に答える