c++11:std::bind
事情是這樣的,
有兩個類,A類中的成員函式要作為B類的回撥函式。
查閱資料發現,c++11之前類的非靜態成員函式,是不能作為回撥函式的,編譯器會報錯。這是因為類的成員函式有一個隱藏的this指標,而回撥函式的函式指標的引數是事先確定的,所以只要之前大部分是使用普通函式或靜態函式作為回撥指標的。
c++11後 std::bind可以解決這個問題。例如:
class A
{
public:
bool make_callback(int a, std::string& s);//類的非靜態成員函式
}
//宣告函式指標型別,返回值型別bool, 引數型別int和std::string的引用
using callback = std::function<bool(int, std::string&)>;
class B
{
public:
void setfunc(callback cb)
}
int main()
{
using std::placeholders::_1;//佔位符
using std::placeholders::_2;
B b;
// 記住,類的成員非靜態函式就用&,傳入的第一個引數必須是this,_1,_2表示回撥函式的顯示的引數
b.setfunc(std::bind(&A::make_callback,this,_1,_2))
}
參考:
https://blog.csdn.net/sinat_27953939/article/details/97107766
寫的比我這個更詳細。
相關文章
- c++11:std::boolalpha、std::noboolalphaC++
- 詭異!std::bind in std::bind 編譯失敗編譯
- std::bind與std::ref, why and how
- c++11:std::is_sameC++
- (C++11/14/17學習筆記):std::atomic續、std::async與std::thread對比C++筆記thread
- 透徹理解C++11新特性:右值引用、std::move、std::forwardC++Forward
- C++11 標準庫 bind 函式C++函式
- C++/C++11中std numeric limits的使用C++MIT
- C++11 執行緒同步介面std::condition_variable和std::future的簡單使用C++執行緒
- C++11中std::move、std::forward、左右值引用、移動建構函式的測試C++Forward函式
- C++11併發程式設計:多執行緒std::threadC++程式設計執行緒thread
- c++11 執行緒間同步---利用std::condition_variable實現C++執行緒
- 解決 /kaldi-trunk/tools 目錄下make安裝報錯需要支援 ISO C++ 2011 -std=c++11 or -std=gnu++11C++
- std::vector 和 std::list 區別
- std::reserve和std::resize的區別
- `std::packaged_task`、`std::thread` 和 `std::async` 的區別與聯絡Packagethread
- 【C++11】c++11實現執行緒池C++執行緒
- C++11:一些微小的變化(新的資料型別、template表示式內的空格、nullptr、std::nullptr_t)C++資料型別Null
- 【C++併發實戰】(三) std::future和std::promiseC++Promise
- C++ 標準庫 std::set std::multiset swap()的使用C++
- std::count 函式函式
- ODRDMS_GOV_STDGo
- std::make_shared
- C++(std::vector)C++
- JavaScript bind()JavaScript
- 智慧指標思想實踐(std::unique_ptr, std::shared_ptr)指標
- C++11新特性C++
- std::function用法學習Function
- zend_std_read_property
- 理解 std::declval 和 decltype
- 詳解bind
- this、apply、call、bindAPP
- javascript bind polyfillJavaScript
- DNS和BINDDNS
- 手寫bind
- v-bind
- bind 127.0.0.1 ::1 和 bind 127.0.0.1 有什麼區別127.0.0.1
- C++ 智慧指標詳解: std::unique_ptr 和 std::shared_ptrC++指標