2012-02-25 81 views
0

我想使用boost ::綁定(我不知道這是否真的是我的問題的解決方案)創建一個包裝,它有一個功能或兩個參數,而包裝只接受一個參數並將其他參數固定爲某個常量值。我的功能看起來像如何使用boost ::綁定創建一個函數包裝

double f(double a, double b) 
{ 
    return a/b; 
} 

double g(double b) 
{ 
    return 2*b; // b+b? 
} 

在我的代碼我有一個功能,一個參數一個typedef:

typedef boost::function<double (double)> callback; 

,我的想法是創建函數包裝用此:

callback cb; 
cb = boost::bind(f, _1, 2)(x); 

這樣我可以調用第三函數,使用在參數傳遞一個包裝的函數:

double use(callback cb, double x, double y) 
{ 
    return cb(x0) - y0; 
} 

我具有約30的功能與一個或兩個參數,和第一或第二必須是恆定的。這個常數是不知道use(),但在use實現的算法與每一個功能的工作原理。

當我嘗試編譯我的代碼,我得到一個錯誤的行cb = boost::bind(f, _1, 2)(x);

'* f' cannot be used as a function 

當我嘗試直接使用綁定,如cout << boost::bind(f, _1, 2)(x);,我沒有得到一個錯誤。

我做了什麼錯在這裏?

回答

2

爲什麼添加(x)

cb = boost::bind(f, _1, 2); 

這已經定義的f它的第二個參數是2的包裝,你可以調用

cb(x0) 

得到f(x0, 2)

+0

我加入了'(x)的'因爲'提振:: bind'文檔中所有的例子做。現在,當你指出這一點似乎很清楚,因爲缺少的參數是通過使用'填寫()',而不是當綁定完成聞名。它現在有用,謝謝! – Christoph 2012-02-25 09:35:07

相關問題