2014-03-28 92 views
1

boost :: bind如何被用於函數的void指針參數?boost :: bind for void指針參數

boost::bind(foo, _1, boost::ref((void*)this)) 

顯然是不正確的。

+0

什麼'foo'的完整簽名?它是成員函數還是免費函數? –

+0

它是這樣的:void foo(const&argument1,Object * obj) –

回答

1

綁定是強類型。與void*回調通常看到用C的API,沒有必要以其它方式使用它:

struct Object { /* .... */ }; 

int some_callback(Object& o) // or e.g. a thread function 
{ 
    // use o 
} 

你會綁定或稱其爲:

Object instance; 
boost::function<int(Object&)> f = boost::bind(&some_callback, boost::ref(instance)); 

當然,你可以按值傳遞

int by_value(Object o) {} 

f = boost::bin(&by_value, instance); // or `std::move(instance)` if appropriate 

如果你通過指針堅持爲什麼):

int by_pointer(Object* o) {} 
f = boost::bin(&by_pointer, &instance); 

如果你想成爲真正的真髒(或者你想成爲的簽名與C API兼容):

int by_void_ptr(void* opaque_pointer) {} 
f = boost::bind(&by_void_ptr, &instance);