簡體   English   中英

如何使用boost :: bind創建函數包裝器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM