這是C++11領(lǐng)域最具實(shí)用性和工程實(shí)踐價(jià)值的著作。作者是金山軟件的資深工程師,有多年一線(xiàn)開(kāi)發(fā)經(jīng)驗(yàn),致力于C++11的應(yīng)用和推廣。C++11新特性眾多,作者根據(jù)自己幾年來(lái)的研究和實(shí)踐,甄選出了其中最常用和實(shí)用的部分新特性,并結(jié)合代碼實(shí)例講解了如何通過(guò)這些新特性來(lái)優(yōu)化既有的C++代碼,這部分內(nèi)容不僅能讓你迅速掌握C++11,而且能充分讓你領(lǐng)略C++11的魅力。更為重要的,作者還結(jié)合自己的企業(yè)實(shí)踐和開(kāi)源項(xiàng)目,講解了如何利用C++11開(kāi)發(fā)各種常用的工程級(jí)項(xiàng)目,并且所有項(xiàng)目的代碼均開(kāi)源,具有非常高的使用價(jià)值。
全書(shū)共16章,分為兩個(gè)部分
第一部分 C++11改進(jìn)我們的程序
使用類(lèi)型推導(dǎo)、lambda、tupe元組等新特性讓程序變得更簡(jiǎn)潔和更現(xiàn)代;
使用右值引用、move語(yǔ)義、emplace_back等新特性改進(jìn)程序的性能;
使用可變參數(shù)模板和類(lèi)型萃取等新特性消除重復(fù)和提高代碼質(zhì)量;
使用智能指針相關(guān)新特性解決內(nèi)存泄露問(wèn)題;
使用線(xiàn)程、互斥量、異步操作等新特性讓多線(xiàn)程開(kāi)發(fā)更簡(jiǎn)單;
……
第二部分 C++11工程實(shí)踐
用C++11改進(jìn)各種常用的設(shè)計(jì)模式,如單例模式、觀察者模式、訪(fǎng)問(wèn)者模式,等等;
用C++11開(kāi)發(fā)一個(gè)半同步半異步線(xiàn)程池、消息總線(xiàn)庫(kù)和通信程序;
用C++11開(kāi)發(fā)輕量級(jí)AOP庫(kù)、輕量級(jí)IoC容器、輕量級(jí)的并行task庫(kù)
用C++11封裝SQLite庫(kù)和開(kāi)發(fā)linq to objects庫(kù);
……
為什么要寫(xiě)這本書(shū)2011年C++11標(biāo)準(zhǔn)剛發(fā)布時(shí),廣大C++開(kāi)發(fā)者奔走相告,我也在第一時(shí)間看了C++之父Bjarne,Stroustrup的C++11 FAQ(http://www.stroustrup.com/C++11FAQ.html),雖然只介紹了一部分特性,而且特性的用法介紹也很簡(jiǎn)短,但給我?guī)?lái)三個(gè)震撼:第一個(gè)震撼是發(fā)現(xiàn)我?guī)缀醪徽J(rèn)識(shí)C++了,這么多新特性,與以前的C++很不同;第二個(gè)震撼是很多東西和其他語(yǔ)言類(lèi)似,比如C#或者Java,感覺(jué)很酷;第三個(gè)震撼是很潮,比如lambda特性,Java都還沒(méi)有(那時(shí)Java 8還沒(méi)出來(lái)),C++11已經(jīng)有了。我是一個(gè)喜歡研究新技術(shù)的人,一下子就被C++那么多新特性吸引住了,連續(xù)幾天都在看FAQ,完全著迷了,雖然當(dāng)時(shí)有很多地方?jīng)]看明白,但仍然很興奮,因?yàn)槲抑肋@就是我想要的C++。我馬上更新編譯器嘗鮮,學(xué)習(xí)新特性。經(jīng)過(guò)一段時(shí)間的學(xué)習(xí),在對(duì)一些主要特性有一定的了解之后,我決定在新項(xiàng)目中使用C++11。用C++11的感覺(jué)非常好:有了auto就不用寫(xiě)冗長(zhǎng)的類(lèi)型定義了,有了lambda就不用定義函數(shù)對(duì)象了,算法也用得更舒服和自然,初始化列表讓容器和初始化變得很簡(jiǎn)便,還有右值引用、智能指針和線(xiàn)程等其他很棒的特性。C++11確實(shí)讓項(xiàng)目的開(kāi)發(fā)效率提高了很多。
相比C++98/03,C++11做了大幅度的改進(jìn),增加了相當(dāng)多的現(xiàn)代編程語(yǔ)言的特性,使得C++的開(kāi)發(fā)效率有了很大的提高。比如,C++11增加了右值引用,可以避免無(wú)謂的復(fù)制,從而提高程序性能;C++11增加了可變模板參數(shù),使C++的泛型編程能力更加強(qiáng)大,也大幅消除了重復(fù)模板定義;C++11增加了type_traits,可以使我們很方便地在編譯期對(duì)類(lèi)型進(jìn)行計(jì)算、查詢(xún)、判斷、轉(zhuǎn)換和選擇;C++11中增加的智能指針使我們不用擔(dān)心內(nèi)存泄露問(wèn)題了;C++11中的線(xiàn)程庫(kù)讓我們能很方便地編寫(xiě)可移植的并發(fā)程序。除了這些較大的改進(jìn)之外,C++11還增加了很多其他實(shí)用、便利的特性,提高了開(kāi)發(fā)的便利性。對(duì)于一個(gè)用過(guò)C#的開(kāi)發(fā)者來(lái)說(shuō),學(xué)習(xí)C++11一定會(huì)有一種似曾相識(shí)的感覺(jué),比如C++11的auto、for-loop循環(huán)、lambda表達(dá)式、初始化列表、tuple等分別對(duì)應(yīng)了C#中的var、for-loop循環(huán)、lambda表達(dá)式、初始化列表、tuple,這些小特性使我們編寫(xiě)C++程序更加簡(jiǎn)潔和順手。C++11增加的這些特性使程序編寫(xiě)變得更容易、更簡(jiǎn)潔、更高效、更安全和更強(qiáng)大,那么我們還有什么理由不去學(xué)習(xí)這些特性并充分享受這些特性帶來(lái)的好處呢?學(xué)習(xí)和使用C++11不要背著C++的歷史包袱,要輕裝上陣,把它當(dāng)作一門(mén)新的語(yǔ)言來(lái)學(xué)習(xí),才能發(fā)現(xiàn)它的魅力和學(xué)習(xí)的樂(lè)趣。C++11增加的新特性有一百多項(xiàng),很多人質(zhì)疑這會(huì)使本已復(fù)雜的C++語(yǔ)言變得更加復(fù)雜,從而產(chǎn)生一種抗拒心理,其實(shí)這是對(duì)C++11的誤解,C++11并沒(méi)有變得更復(fù)雜,恰恰相反,它在做簡(jiǎn)化和改進(jìn)!比如auto和decltype可以用來(lái)避免寫(xiě)冗長(zhǎng)的類(lèi)型,bind綁定器讓我們不用關(guān)注到底是用bind1st還是bind2nd了,lambda表達(dá)式讓我們可以不必寫(xiě)大量的不易維護(hù)的函數(shù)對(duì)象等。
語(yǔ)言都是在不斷進(jìn)化之中的,只有跟上時(shí)代潮流的語(yǔ)言才是充滿(mǎn)活力與魅力的語(yǔ)言。C++正是這樣一門(mén)語(yǔ)言,雖然它已經(jīng)有三十多年的歷史了,但是它還在發(fā)展之中。C++14標(biāo)準(zhǔn)已經(jīng)制定完成,C++17也提上了日程,我相信C++的未來(lái)會(huì)更加美好,C++開(kāi)發(fā)者的日子也會(huì)越來(lái)越美好!
作為比較早使用C++11的開(kāi)發(fā)者,我開(kāi)始在項(xiàng)目中應(yīng)用C++11的時(shí)候,可以查閱的資料還很有限,主要是通過(guò)ISO標(biāo)準(zhǔn)(ISO/IEC 14882:2011)、維基百科、MSDN和http://en.cppreference.com/w/等來(lái)學(xué)習(xí)C++11。然而,這些資料對(duì)新特性的介紹比較零散,雖然知道這些新特性的基本用法,但有時(shí)候不知道為什么需要這個(gè)新特性,在實(shí)際項(xiàng)目中該如何應(yīng)用,或者說(shuō)最佳實(shí)踐是什么,這些東西網(wǎng)上可沒(méi)有,也沒(méi)有人告訴你,因?yàn)楫?dāng)時(shí)只有很少的人在嘗試用C++11,這些都需要自己不斷地去實(shí)踐、去琢磨,當(dāng)時(shí)多么希望能有一些指導(dǎo)C++11實(shí)踐的資料啊。在不斷實(shí)踐的過(guò)程中,我對(duì)C++11的認(rèn)識(shí)加深了,同時(shí),也把應(yīng)用C++11的一些心得和經(jīng)驗(yàn)放到我的技術(shù)博客(http://www.cnblogs.com/qicosmos/)上分享出來(lái),還開(kāi)源了不少C++11的代碼,這些代碼大多來(lái)自于項(xiàng)目實(shí)踐。技術(shù)分享得到了很多認(rèn)識(shí)的或不認(rèn)識(shí)的朋友的鼓勵(lì)與支持,曾經(jīng)不止一個(gè)人問(wèn)過(guò)我同一個(gè)問(wèn)題,你堅(jiān)持寫(xiě)博客分享C++11技術(shù)是為了什么,有什么好處嗎?我想最重要的原因就是C++11讓我覺(jué)得C++語(yǔ)言是非常有意思和有魅力的語(yǔ)言,不斷給人帶來(lái)驚喜,在窺探到C++11的妙處之后,我很想和更多的人分享,讓更多的人領(lǐng)略C++11的魅力。另外一個(gè)原因是我的一點(diǎn)夢(mèng)想,希望C++的世界變得更加美好,C++開(kāi)發(fā)者的日子變得更美好。我希望這些經(jīng)驗(yàn)?zāi)軒椭鷮W(xué)習(xí)C++11的朋友,讓他們少走彎路,快速地將C++11應(yīng)用起來(lái),也希望這些代碼能為使用C++的朋友帶來(lái)便利,解決他們的實(shí)際問(wèn)題。
“獨(dú)樂(lè)樂(lè),與人樂(lè)樂(lè),孰樂(lè)乎?與少樂(lè)樂(lè),與眾樂(lè)樂(lè),孰樂(lè)?”,這是我分享技術(shù)和寫(xiě)作此書(shū)的初衷。
讀者對(duì)象C++開(kāi)發(fā)人員。
C++11新標(biāo)準(zhǔn)發(fā)布已經(jīng)4年了,C++11的使用也越來(lái)越普及,這是大勢(shì)所趨,普通的C++開(kāi)發(fā)者不論是新手還是老手,都有必要學(xué)習(xí)和應(yīng)用C++11,C++11強(qiáng)大的特性可以大幅提高生產(chǎn)率,讓我們開(kāi)發(fā)項(xiàng)目更加得心應(yīng)手。
C++11愛(ài)好者。
其他語(yǔ)言的開(kāi)發(fā)人員,比如C#或者Java開(kāi)發(fā)人員,想轉(zhuǎn)到C++開(kāi)發(fā)正是時(shí)機(jī),因?yàn)樾聵?biāo)準(zhǔn)的很多特性,C#和Java中也有,學(xué)起來(lái)也并不陌生,可以乘著新標(biāo)準(zhǔn)的“輕舟”學(xué)習(xí)C++11,事半功倍,正當(dāng)其時(shí)。
如何閱讀本書(shū)雖然C++11的目的是為了提高生產(chǎn)率,讓C++變得更好用和更強(qiáng)大,但是,這些新特性畢竟很多,面對(duì)這么多特性,初學(xué)者可能會(huì)茫然無(wú)措,找不到頭緒。如果對(duì)著這些特性一一去查看標(biāo)準(zhǔn),不僅枯燥乏味,還喪失了學(xué)習(xí)的樂(lè)趣,即使知道了新特性的基本用法,卻不知道如何應(yīng)用到實(shí)際開(kāi)發(fā)中。針對(duì)這兩個(gè)問(wèn)題,本書(shū)試圖另辟蹊徑來(lái)解決。本書(shū)的前半部分將從另外一個(gè)角度去介紹這些新特性,不追求大而全,將重點(diǎn)放在一些常用的C++11特性上,有側(cè)重地從另外一個(gè)角度將這些特性分門(mén)別類(lèi),即從利用這些新特性如何去改進(jìn)我們現(xiàn)有程序的角度介紹。這種方式一來(lái)可以讓讀者掌握這些新特性的用法;二來(lái)還可以讓讀者知道這些特性是如何改進(jìn)現(xiàn)有程序的,從而能更深刻地領(lǐng)悟C++11的新特性。
如果說(shuō)本書(shū)的前半部分貼近實(shí)戰(zhàn),那么本書(shū)后半部分的工程級(jí)應(yīng)用就是真正的實(shí)戰(zhàn)。后半部分將通過(guò)豐富的開(kāi)發(fā)案例來(lái)介紹如何用C++11去開(kāi)發(fā)項(xiàng)目,因?yàn)橹挥性趯?shí)戰(zhàn)中才能學(xué)到真東西。后半部分實(shí)戰(zhàn)案例涉及面比較廣,是筆者近年來(lái)使用C++11的經(jīng)驗(yàn)與心得的總結(jié)。這些實(shí)踐經(jīng)驗(yàn)是針對(duì)實(shí)際開(kāi)發(fā)過(guò)程中遇到的問(wèn)題來(lái)選取的,它們的價(jià)值不僅可以作為C++11實(shí)踐的指導(dǎo),還可以直接在實(shí)際開(kāi)發(fā)中應(yīng)用(本書(shū)開(kāi)發(fā)案例源碼遵循LGPL開(kāi)源協(xié)議),相信這些實(shí)戰(zhàn)案例一定能給讀者帶來(lái)更深入的思考。
通過(guò)學(xué)習(xí)本書(shū)基礎(chǔ)知識(shí)與實(shí)戰(zhàn)案例,相信讀者一定能掌握大部分C++11新特性,并能應(yīng)用于自己的實(shí)際開(kāi)發(fā)中,充分享受C++11帶來(lái)的好處。
C++之父BjarneStroustrup曾說(shuō)過(guò):C++11看起來(lái)像一門(mén)新的語(yǔ)言。這個(gè)說(shuō)法是否夸張,讀者不妨看完本書(shū)之后再來(lái)回味這句話(huà)。
祁 宇 資深C++技術(shù)專(zhuān)家,致力于C++11的應(yīng)用、研究和推廣。金山軟件WPS資深工程師,負(fù)責(zé)Android服務(wù)端開(kāi)發(fā)。精通OOP、OOD、設(shè)計(jì)模式和重構(gòu),主要研究方向?yàn)榧軜?gòu)設(shè)計(jì)和業(yè)務(wù)重構(gòu),有豐富的開(kāi)發(fā)和研發(fā)管理經(jīng)驗(yàn)。愛(ài)好C++,愛(ài)好開(kāi)源,樂(lè)于研究和分享技術(shù),開(kāi)源了多個(gè)項(xiàng)目,在《程序員》雜志發(fā)表多篇技術(shù)文章。
2013年被評(píng)為珠海市優(yōu)秀青年人才。
前言
第一篇 C++11改進(jìn)我們的程序
第1章 使用C++11讓程序更簡(jiǎn)潔、更現(xiàn)代,
1.1 類(lèi)型推導(dǎo)
1.1.1 auto類(lèi)型推導(dǎo)
1.1.2 decltype關(guān)鍵字
1.1.3 返回類(lèi)型后置語(yǔ)法——auto和decltype的結(jié)合使用
1.2 模板的細(xì)節(jié)改進(jìn)
1.2.1 模板的右尖括號(hào)
1.2.2 模板的別名
1.2.3 函數(shù)模板的默認(rèn)模板參數(shù)
1.3 列表初始化
1.3.1 統(tǒng)一的初始化
1.3.2 列表初始化的使用細(xì)節(jié)
1.3.3 初始化列表
1.3.4 防止類(lèi)型收窄
1.4 基于范圍的for循環(huán)
1.4.1 for循環(huán)的新用法
1.4.2 基于范圍的 for循環(huán)的使用細(xì)節(jié)
1.4.3 讓基于范圍的 for循環(huán)支持自定義類(lèi)型
1.5 std::function和bind綁定器
1.5.1 可調(diào)用對(duì)象
1.5.2 可調(diào)用對(duì)象包裝器——std::function
1.5.3 std::bind綁定器
1.6 lambda表達(dá)式
1.6.1 lambda表達(dá)式的概念和基本用法
1.6.2 聲明式的編程風(fēng)格,簡(jiǎn)潔的代碼
1.6.3 在需要的時(shí)間和地點(diǎn)實(shí)現(xiàn)閉包,使程序更靈活
1.7 tupe元組
1.8 總結(jié)
第2章 使用C++11改進(jìn)程序性能
2.1 右值引用
2.1.1 &&的特性
2.1.2 右值引用優(yōu)化性能,避免深拷貝
2.2 move語(yǔ)義
2.3 forward和完美轉(zhuǎn)發(fā)
2.4 emplace_back減少內(nèi)存拷貝和移動(dòng)
2.5 unordered container無(wú)序容器
2.6 總結(jié)
第3章 使用C++11消除重復(fù),提高代碼質(zhì)量
3.1 type_traits——類(lèi)型萃取
3.1.1 基本的type_traits
3.1.2 根據(jù)條件選擇的traits
3.1.3 獲取可調(diào)用對(duì)象返回類(lèi)型的traits
3.1.4 根據(jù)條件禁用或啟用某種或某些類(lèi)型traits
3.2 可變參數(shù)模板
3.2.1 可變參數(shù)模板函數(shù)
3.2.2 可變參數(shù)模板類(lèi)
3.2.3 可變參數(shù)模板消除重復(fù)代碼
3.3 可變參數(shù)模版和type_taits的綜合應(yīng)用
3.3.1 optional的實(shí)現(xiàn)
3.3.2 惰性求值類(lèi)lazy的實(shí)現(xiàn)
3.3.3 dll幫助類(lèi)
3.3.4 lambda鏈?zhǔn)秸{(diào)用
3.3.5 any類(lèi)的實(shí)現(xiàn)
3.3.6 function_traits
3.3.7 variant的實(shí)現(xiàn)
3.3.8 ScopeGuard
3.3.9 tuple_helper
3.4 總結(jié)
第4章 使用C++11解決內(nèi)存泄露的問(wèn)題
4.1 shared_ptr共享的智能指針
4.1.1 shared_ptr的基本用法
4.1.2 使用shared_ptr需要注意的問(wèn)題
4.2 unique_ptr獨(dú)占的智能指針
4.3 weak_ptr弱引用的智能指針
4.3.1 weak_ptr基本用法
4.3.2 weak_ptr返回this指針
4.3.3 weak_ptr解決循環(huán)引用問(wèn)題
4.4 通過(guò)智能指針管理第三方庫(kù)分配的內(nèi)存
4.5 總結(jié)
第5章 使用C++11讓多線(xiàn)程開(kāi)發(fā)變得簡(jiǎn)單
5.1 線(xiàn)程
5.1.1 線(xiàn)程的創(chuàng)建
5.1.2 線(xiàn)程的基本用法
5.2 互斥量
5.2.1 獨(dú)占互斥量std::mutex
5.2.2 遞歸互斥量std::recursive_mutex
5.2.3 帶超時(shí)的互斥量std::timed_mutex和std::recursive_timed_mutex
5.3 條件變量
5.4 原子變量
5.5 call_once/once_flag的使用
5.6 異步操作
5.6.1 獲取線(xiàn)程函數(shù)返回值的類(lèi)std::future
5.6.2 協(xié)助線(xiàn)程賦值的類(lèi) std::promise
5.6.3 可調(diào)用對(duì)象的包裝類(lèi)std::package_task
5.6.4 std::promise、std::packaged_task和std::future三者之間的關(guān)系
5.7 線(xiàn)程異步操作函數(shù)async
5.8 總結(jié)
第6章 使用C++11中便利的工具
6.1 處理日期和時(shí)間的chrono庫(kù)
6.1.1 記錄時(shí)長(zhǎng)的duration
6.1.2 表示時(shí)間點(diǎn)的time point
6.1.3 獲取系統(tǒng)時(shí)鐘的clocks
6.1.4 計(jì)時(shí)器timer
6.2 數(shù)值類(lèi)型和字符串的相互轉(zhuǎn)換
6.3 寬窄字符轉(zhuǎn)換
6.4 總結(jié)
第7章 C++11的其他特性
7.1 委托構(gòu)造函數(shù)和繼承構(gòu)造函數(shù)
7.1.1 委托構(gòu)造函數(shù)
7.1.2 繼承構(gòu)造函數(shù)
7.2 原始的字面量
7.3 f?inal和override關(guān)鍵字
7.4 內(nèi)存對(duì)齊
7.4.1 內(nèi)存對(duì)齊介紹
7.4.2 堆內(nèi)存的內(nèi)存對(duì)齊
7.4.3 利用alignas指定內(nèi)存對(duì)齊大小
7.4.4 利用alignof和std::alignment_of獲取內(nèi)存對(duì)齊大小
7.4.5 內(nèi)存對(duì)齊的類(lèi)型std::aligned_storage
7.4.6 std::max_align_t和std::align操作符
7.5 C++11新增的便利算法
7.6 總結(jié)
第二篇 C++11工程級(jí)應(yīng)用
第8章 使用C++11改進(jìn)我們的模式
8.1 改進(jìn)單例模式
8.2 改進(jìn)觀察者模式
8.3 改進(jìn)訪(fǎng)問(wèn)者模式
8.4 改進(jìn)命令模式
8.5 改進(jìn)對(duì)象池模式
8.6 總結(jié)
第9章 使用C++11開(kāi)發(fā)一個(gè)半同步半異步線(xiàn)程池
9.1 半同步半異步線(xiàn)程池介紹
9.2 線(xiàn)程池實(shí)現(xiàn)的關(guān)鍵技術(shù)分析
9.3 同步隊(duì)列
9.4 線(xiàn)程池
9.5 應(yīng)用實(shí)例
9.6 總結(jié)
第10章 使用C++11開(kāi)發(fā)一個(gè)輕量級(jí)的AOP庫(kù)
10.1 AOP介紹
10.2 AOP的簡(jiǎn)單實(shí)現(xiàn)
10.3 輕量級(jí)的AOP框架的實(shí)現(xiàn)
10.4 總結(jié)
第11章 使用C++11開(kāi)發(fā)一個(gè)輕量級(jí)的IoC容器
11.1 IoC容器是什么
11.2 IoC創(chuàng)建對(duì)象
11.3 類(lèi)型擦除的常用方法
11.4 通過(guò)Any和閉包來(lái)擦除類(lèi)型
11.5 創(chuàng)建依賴(lài)的對(duì)象
11.6 完整的IoC容器
11.7 總結(jié)
第12章 使用C++11開(kāi)發(fā)一個(gè)對(duì)象的消息總線(xiàn)庫(kù)
12.1 消息總線(xiàn)介紹
12.2 消息總線(xiàn)關(guān)鍵技術(shù)
12.2.1 通用的消息定義
12.2.2 消息的注冊(cè)
12.2.3 消息分發(fā)
12.2.4 消息總線(xiàn)的設(shè)計(jì)思想
12.3 完整的消息總線(xiàn)
12.4 應(yīng)用實(shí)例
12.5 總結(jié)
第13章 使用C++11封裝sqlite庫(kù)
13.1 sqlite基本用法介紹
13.1.1 打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)的函數(shù)
13.1.2 執(zhí)行SQL語(yǔ)句的函數(shù)
13.2 rapidjson基本用法介紹
13.2.1 解析json字符串
13.2.2 創(chuàng)建json對(duì)象
13.2.3 對(duì)rapidjson的一點(diǎn)擴(kuò)展
13.3 封裝sqlite的SmartDB
13.3.1 打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)的接口
13.3.2 Excecute接口
13.3.3 ExecuteScalar接口
13.3.4 事務(wù)接口
13.3.5 ExcecuteTuple接口
13.3.6 json接口
13.3.7 查詢(xún)接口
13.4 應(yīng)用實(shí)例
13.5 總結(jié)
第14章 使用C++11開(kāi)發(fā)一個(gè)linq to objects庫(kù)
14.1 LINQ介紹
14.1.1 LINQ語(yǔ)義
14.1.2 Linq標(biāo)準(zhǔn)操作符(C#)
14.2 C++中的LINQ
14.3 LINQ實(shí)現(xiàn)的關(guān)鍵技術(shù)
14.3.1 容器和數(shù)組的泛化
14.3.2 支持所有的可調(diào)用對(duì)象
14.3.3 鏈?zhǔn)秸{(diào)用
14.4 linq to objects的具體實(shí)現(xiàn)
14.4.1 一些典型LINQ操作符的實(shí)現(xiàn)
14.4.2 完整的linq to objects的實(shí)現(xiàn)
14.5 linq to objects的應(yīng)用實(shí)例
14.6 總結(jié)
第15章 使用C++11開(kāi)發(fā)一個(gè)輕量級(jí)的并行task庫(kù)
15.1 TBB的基本用法
15.1.1 TBB概述
15.1.2 TBB并行算法
15.1.3 TBB的任務(wù)組
15.2 PPL的基本用法
15.2.1 PPL任務(wù)的鏈?zhǔn)竭B續(xù)執(zhí)行
15.2.2 PPL的任務(wù)組
15.3 TBB和PPL的選擇
15.4 輕量級(jí)的并行庫(kù)TaskCpp的需求
15.5 TaskCpp的任務(wù)
15.5.1 task的實(shí)現(xiàn)
15.5.2 task的延續(xù)
15.6 TaskCpp任務(wù)的組合
15.6.1 TaskGroup
15.6.2 WhenAll
15.6.3 WhenAny
15.7 TaskCpp并行算法
15.7.1 ParallelForeach:并行對(duì)區(qū)間元素執(zhí)行某種操作
15.7.2 ParallelInvoke:并行調(diào)用
15.7.3 ParallelReduce:并行匯聚
15.8 總結(jié)
第16章 使用C++11開(kāi)發(fā)一個(gè)簡(jiǎn)單的通信程序
16.1 反應(yīng)器和主動(dòng)器模式介紹
16.2 asio中的Proactor
16.3 asio的基本用法
16.3.1 異步接口
16.3.2 異步發(fā)送
16.4 C++11結(jié)合asio實(shí)現(xiàn)一個(gè)簡(jiǎn)單的服務(wù)端程序
16.5 C++11結(jié)合asio實(shí)現(xiàn)一個(gè)簡(jiǎn)單的客戶(hù)端程序
16.6 TCP粘包問(wèn)題的解決
16.7 總結(jié)
參考文獻(xiàn)