2014-11-14 55 views
0

我想使用boost ::綁定,以允許特定回調參數存儲的任意回調函數的列表:如何指定一個C++函數指針可以接受的boost :: bind'ed功能

例如:

void callback1(int something) {...} 
void callback2(int onething,theotherthing) {...} 

回調系統存儲這些在容器中:

typedef void (*lpvFunc)(); 
// ... 
std::map <int,lpvFunc>regged_callbacks; 

和在某些點上登記功能:

registerCallback(int slot,lpvFunc cb) { regged_callbacks[slot]=cb; } 

當我嘗試做綁定,以適應回調

registerCallback(1,boost::bind(callback2,42,31337)); 

和shazbang我得到這樣的編譯器錯誤出現問題: ...注:從「提升爲參數2沒有已知的轉換: :_bi :: bind_t>''到'lpvFunc {aka void(*)()}'|

所以我怎麼修復,使這項工作(因爲升壓:: ASIO似乎能夠接受這樣的事情就好在它的指針回調)

回答

3

無法原始函數指針存儲一個捕獲函數。你可以做的,而不是爲存儲類型擦除函子,在不改變任何東西:

typedef std::function<void()> lpvFunc; 

(或Boost.Function,如果你不是在C++ 11)

+0

什麼,因爲GCC的這種升壓形式4.7.1(mingw)還沒有完全運行C++ 11的支持? boost :: function? – 2014-11-14 15:45:14

+0

是的,你可能想要的是'boost :: function' – YoungJohn 2014-11-14 15:53:34

+0

@BrianJack:你的編譯器當然支持'std :: function',即使它的整體C++ 11支持不完全。多年來我一直在GCC 4.6中使用它們。 – 2014-11-14 16:05:49