Boost Bind語法一致性的體現

2021-04-13 22:12:04 字數 3311 閱讀 3799

//-------------- boost.bind --------------

#include

#include

#include

#include

#include

#include

#pragma hdrstop

//----------------------------------------

#pragma argsused

using namespacestd;

voidprint_sum(inta,intb)

classperson

voidprintinformation(void)

};intmain(intargc, char* argv)

;for_each(array, array + 4, boost::bind(&print_sum, _1, 100));  // (8)

// 例子2

:元素是以值的方式儲存的,

所以需要介面卡

men_fun_ref

vectorv2;

v2.push_back(person(string("person 1"), 25));

v2.push_back(person(string("person 2"), 24));

v2.push_back(person(string("person 3"), 23));

v2.push_back(person(string("person 4"), 22));

// 三者完成的任務相同

// 由於多次呼叫

v2.end()

使效率降低、**冗長

for(vector::iterator i = v2.begin(); i != v2.end(); ++i)

// 需要介面卡

men_fun_ref

來對v2

的元素成員呼叫成員函式

for_each(v2.begin(), v2.end(),mem_fun_ref(person::printinformation));

// 簡潔、清楚表達意圖

for_each(v2.begin(), v2.end(), bind(person::printinformation, _1));

// 例子

3:元素是以指標方式儲存的

, 需要介面卡

men_fun,

且需要顯式的刪除元素

vectorv3;

v3.push_back(newperson(string("person 1"), 25));

v3.push_back(newperson(string("person 2"), 24));

v3.push_back(newperson(string("person 3"), 23));

v3.push_back(newperson(string("person 4"), 22));

// 三者完成的任務相同

// 多次呼叫

v3.end()

使效率降低、**冗長

for(vector::iterator i = v3.begin(); i != v3.end(); ++i)

// 需要介面卡

men_fun

來對v3

的元素成員呼叫成員函式

for_each(v3.begin(), v3.end(), mem_fun(person::printinformation));

// 簡潔、清楚表達意圖

for_each(v3.begin(), v3.end(), bind(person::printinformation, _1));

// 顯式的刪除

v3元素

, 增加了**量

for(vector::iterator i = v3.begin(); i != v3.end(); ++i)

// 例子4:

vector> v4;

v4.push_back(boost::shared_ptr(newperson("person 1", 25)));

v4.push_back(boost::shared_ptr(newperson("person 1", 24)));

v4.push_back(boost::shared_ptr(newperson("person 1", 23)));

v4.push_back(boost::shared_ptr(newperson("person 1", 22)));

// 兩者完成的任務相同

// 多次呼叫

v4.end()

使效率降低、即使不需要手動刪除元素**依然冗長

for(vector>::iterator i = v4.begin();

i != v4.end(); ++i)

// 因為智慧型指標沒有成員函式

介面卡men_fun_ref

和men_fun

都不再適用

// 然而

boost::bind

仍可以簡潔、清楚的表達意圖

for_each(v4.begin(), v4.end(), bind(person::printinformation, _1));      

system("pause");

return0;

}//-------------------------------

小結:不論採用的是值語義還是指標語義,用於繫結的語法是相同的,甚至在使用智慧型指標時也是相同的。有時候,使用不同的語法有助於**的理解,然而這裡情況就不同了——這裡的任務只是對容器中的元素呼叫成員函式。但不應該低估語法一致性的價值,它對於編寫**的人和日後維護**(假定需要維護)的人,都是有幫助的。儘管標準庫也提供了一些完成相同工作的基本工具,但我們看到

boost.bind

不僅提供了一致的語法,而且也增加了標準庫目前所缺少的功能。

強一致性 弱一致性 最終一致性

這種方式在es等分布式系統中也有體現,可以設定主shard提交即返回成功,或者需要replica shard提交成功再返回。提到分布式架構就一定繞不開 一致性 問題,而 一致性 其實又包含了資料一致性和事務一致性兩種情況,本文主要討論資料一致性 事務一致性指acid 複製是導致出現資料一致性問題的唯...

保證一致性嗎 Kafka的一致性保證

魚和熊掌不可兼得。系統設計需要根據具體的應用場景做出權衡。系統設計者可以通過配置kafka,來得到不同程度的需求滿足。每個kafka主題 topic 都分為多個分割槽 partitions 每個分割槽可以具有多個副本 replica 其中乙個副本是主分割槽 leader 所有讀寫請求都由主分割槽提供...

一致性雜湊

直接貼出一篇介紹的很清楚的博文。關鍵字一致性雜湊 平衡性,單調性,分散性,負載 其實說白了,就是解決把請求分散到不同的機器上運算,怎麼做分散的平均,機器少一台多一台,或者壞掉一台,成很好的自適應和拓展。最簡單的實現分布式演算法,取模嘛,但是它就上述的一些問題,所以不算好的雜湊函式。一致性雜湊演算法,...