[英]How to use boost::bind to create a function wrapper
我想使用boost :: bind(我不確定這是否真的是我的問題的正確解決方案)來為一個帶有一個或兩個參數的函數創建一個包裝器,而該包裝器僅接收一個參數並修復另一個參數保持恆定 我的功能看起來像
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);
,我沒有收到錯誤。
我在這里做錯了什么?
為什么加上(x)
?
cb = boost::bind(f, _1, 2);
這已經定義了f
的包裝,第二個參數是2,您可以調用
cb(x0)
得到f(x0, 2)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.