2015-06-30 23 views
1

假設我有一個功能定義一個函數f1(x)的從另一個函數F0(X,Y)的對象,但設定y以一個固定的值C++

void f0(double x, double parameters[]) { ... } 

,我想定義一個函數對象

std::function <void (double x) >f1 

這樣,例如f1(x) = f0(x,a)其中a是一組指定的參數(例如double parameters[4] = {1.0, 2.9, 6.2, 2.1}

我會怎麼做呢?我的想法是嘗試有一個功能,輸入a輸出f1,但我不知道如何做到這一點。

這樣做的動機是,在本質上,我還沒有在一個庫中,該輸入與一個雙輸入功能的其它功能功能,但我希望有更多的靈活性,以參數添加到功能

回答

1

這很簡單,用一個lambda:

std::function<void(double)> f1 = 
    [&parameters](double x) { f0(x, parameters); }; 

或者,你可以使用std::bind

using namespace std::placeholders; 
std::function<void(double)> f2 = std::bind(f0, _1, parameters); 

但我更喜歡lambda幾乎任何情況。

+0

魔法,非常感謝! – db1234

+0

我建議在lambda解決方案中只使用'auto'而不是'std :: function'。更少的空間使用,可能更快的函數調用。 – CoffeeandCode

+0

請不要將lambda綁定到函數對象。改用auto。 – Otomo

相關問題