boost signal 例項以及延展

2021-06-27 01:26:59 字數 1386 閱讀 2636

boost::signals2::signal 主要用來發射乙個訊號,然後由預先connect的函式指標接收這樣的訊號做處理.

最簡單的例子就是connect乙個裸露的function pointer. 如果需要connect的是乙個例項物件內部的函式,則需要用到boost::bind, 如果需要signal自動判斷這個例項物件是否存在,則需要用到boost::shared_ptr 和 track. 以下是乙個簡單的例子

#include #include #include using namespace std;

class helloworld

void func0()

void func1(int t)

int a;

};boost::signals2::signalsig0; // void 是返回值,就是定義乙個connect的函式形式

boost::signals2::signalsig1;

helloworld hello_g;

void test_0()

int main(int argc, char *argv)

到這裡發現bind很有意思,那麼bind的用法是什麼,在什麼地方比較好用呢?

與lambda表示式類似,感覺主要為stl, algorithm中的一些函式服務,這些函式需要你往裡面傳乙個function or function object, 而這些時候你往往需要自己手動再去寫乙個只有這裡會用到的function or function object. 這樣既不簡潔,又容易與其他function or function object混淆起來. 這時候,若可以通過已有的function構造這樣乙個function,用bind就比較清楚和方便.

std::sort( first, last, bind( &x::name, _1 ) < bind( &x::name, _2 ) ); // sort by name boost的bind能夠overload operator

std::remove_if( first, last, !bind( &x::visible, _1 ) ); // remove invisible objects

現在c++11也有std::bind但是不支援overload operator

ok, 那麼如果是用lambda表示式該怎麼寫呢?

參考:最簡單的是:

/×  [ capture-list ] ( params ) -> ret 

其中capture-list是在lambda中直接使用的變數, params傳值

×/for_each(vec.begin(), vec.end(), (x x));

優化以及例項

ai問題 模型 優化 優化是使用一些工具進行解決 sgd adm等各種演算法進行優化 那麼怎麼選擇優化演算法?將得到的模型和問題,能夠明確知道屬於哪些問題,從而選擇正確的方法。並不是使用演算法就好了,也要加一些東西 比如正則化。objective function 目標函式,由目標函式分類,選擇相應...

Lucene入門以及簡單例項

其實,lucene是乙個很容易上手的搜尋引擎框架,傳統的搜尋引擎,涉及到爬蟲,也就是爬取網 頁,然後對網頁進行加工,也就是索引,最後用於搜 索,lucene這個框架可以很方便的幫你做 法,包括分 詞 索引 搜尋不同的目錄 搜尋不同的域,希望大家通過這個例項,對lucene和 搜尋引擎能有比較全面的認...

cblas安裝以及使用例項

c bdir 目錄下 的 cblibdir 將生成cblas的庫檔案 cblib cblas linux.a。在cblas的安裝目錄 c bdir 下的s rc目錄 中有個c blas h是包 括的cb las的 函式和常 量的頭文 件,使用 cbla s的時候 就需要這 個頭檔案 同時還 需要bl...