2012-10-18 62 views
1

在python中,我可以將對函數的引用傳遞到類中,然後在 之後再次使用它,從而調用具有所需參數的類變量。如下圖所示:如何在C++中引用函數(轉換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++中的*參數我相信會通過重載工作,但我不確定如何加載和卸載變量。

我知道的一些基本問題,但我正在努力通過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); 

回答

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重新定義爲局部變量。我不認爲你想這樣做。

+0

非常感謝,它運作良好。 – joeButler

+0

有沒有辦法讓所需數量的變量成爲可能?例如,如果我想一起添加三個數字,我會做另一個typedef,但構造函數變成非泛型的。我將不得不以不同的方式分配動作函數,因爲function_ptr不包含三個雙打作爲輸入 – joeButler