簡體   English   中英

使用boost :: bind和boost :: function將成員函數分配給回調

[英]Assigning member function to callback with boost::bind and boost::function

我正在嘗試將成員函數分配為API方法的回調,但是它返回以下錯誤消息,我不確定如何解決此問題。

cannot convert ‘boost::function<int(rcv_t_stct*, msg_t_stct*)>*’ to ‘rcv_cb {aka int (*)(rcv_t_stct*, msg_t_stct*)}’

回調簽名:

typedef int (*rcv_cb)(rcv_t *rcv, msg_t *msg);

回調設置器:

create(rcv_cb cb);

我的會員功能:

int receiver::on_received(rcv_t *rcv, msg_t *msg)
{
    return 0;
}

嘗試分配給設置者:

boost::function<int (rcv_t *, msg_t *)> f2( boost::bind( &receiver::on_received, this, _1, _2) ); 
create(f2);

解:

我將接收器類更改為單例,並使用靜態成員函數包裝非靜態函數。

int receiver::on_received(rcv_t *rcv, msg_t *msg)
{
    return receiver::instance().on_received_private(rcv, msg);
}

這是解決此問題的最佳解決方案嗎?

boost::function<>不是自由函數,而是函子(類型為operator()實現)。 您不能將boost::function<S>轉換為帶有簽名S的函數的指針。 如果它在您的控制之內,則可以更改回調設置器以使用boost::function<>而不是自由函數。 如果那不在您的控制范圍內,則您不能將非靜態成員函數用於回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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