freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c模板元編程技術(shù)與應(yīng)用-資料下載頁(yè)

2025-09-30 14:39本頁(yè)面
  

【正文】 Traits用作 MPL的基礎(chǔ)。 MPL是一個(gè)通用的模板元編程框架,它仿照 STL提供了編譯期算法、序列、迭代器等元編程組件。它為普通程序員進(jìn)行元編程提供了高級(jí)抽象,使得元編程變得容易、高效、富有樂(lè)趣。 Boost Type Traits庫(kù)包含一系列 traits類,用于萃取 C++類型特征。另外還包含了一些轉(zhuǎn)換 traits(例如移除一個(gè)類型的 const修飾符等)。 Boost Static Assert庫(kù)用于編譯期斷言,如果評(píng)估的表達(dá)式編譯時(shí)計(jì)算結(jié)果為 true,則代碼可以通過(guò)編譯,否則編譯報(bào)錯(cuò)。 DSEL 對(duì)于領(lǐng)域特定的嵌入式語(yǔ)言 ( domainspecific embedded language, DSEL) 的設(shè)計(jì)者而言, 模板元編程技術(shù)是一件利器。這里的 DSEL就是庫(kù),例如一些圖形或矩陣計(jì)算庫(kù)都可被認(rèn)為是一種小型語(yǔ)言: 其接口定義語(yǔ)法,其實(shí)現(xiàn)定義語(yǔ)義。它們均提供了領(lǐng)域特定的符號(hào)、構(gòu)造和抽象 。 利用模板元編程技術(shù)構(gòu)建的 DSEL,高效且語(yǔ)法接近于從頭構(gòu)建的語(yǔ)言。由于這種 DSEL采用純粹的 C++編寫,與使用獨(dú)立的 DSL相比,無(wú)需再使用專門的編譯器、編輯器等工具,從而可以消除跨語(yǔ)言邊界所需付出的代價(jià)。 如欲進(jìn)一步了解采用 C++模板元編程實(shí)現(xiàn) DSEL,參見(jiàn) [注 9]。 DSEL int a[5][10]。 int i。 for_each(a, a+5, for_loop(var(i)=0, var(i)10, ++var(i), _1[var(i)] += 1) )。 std::for_each((), (), (switch_statement(_1, case_statement0(std::cout constant(zero)), case_statement1(std::cout constant(one)), default_statement(cout constant(other: ) _1) ), cout constant(\n) ) )。 摘自 Boost Lambda庫(kù)的幾個(gè)例子: DSEL for_each( (), (), try_catch( bind(foo, _1), // foo may throw catch_exceptionfoo_exception ( cout constant(Caught foo_exception: ) foo was called with argument = _1 ), catch_exceptionstd::exception ( cout constant(Caught std::exception: ) bind(amp。std::exception::what, _e), throw_exception(bind(constructorbar_exception(), _1))) ), catch_all((cout constant(Unknown), rethrow()) ) ) )。 結(jié)語(yǔ) 模板元程序與常規(guī)代碼結(jié)合使用時(shí),此時(shí)源代碼包含兩種程序:常規(guī)C++運(yùn)行期程序和編譯期運(yùn)行的模板元程序。當(dāng)被編譯器解釋時(shí),模板元程序可以生成高效的代碼,從而可以大幅提高最終應(yīng)用程序的運(yùn)行效率。 通過(guò)將計(jì)算從運(yùn)行期轉(zhuǎn)移至編譯期,在結(jié)果程序啟動(dòng)之前做盡可能多的工作,最終獲得速度更快的程序。 模板元編程也有一些局限性,使用模板元編程時(shí)(尤其使用模板元編程進(jìn)行數(shù)值計(jì)算時(shí))存在一些注意事項(xiàng) …… 調(diào)試?yán)щy:元程序執(zhí)行于編譯期,沒(méi)有用于單步跟蹤元程序執(zhí)行的調(diào)試器(用于設(shè)臵斷點(diǎn)、察看數(shù)據(jù)等)。程序員可做的只能是等待編譯過(guò)程失敗,然后人工破譯編譯器傾瀉到屏幕上的錯(cuò)誤信息。 代碼的可讀性較差。 結(jié)語(yǔ) 結(jié)果程序性能未必一定最優(yōu)化:“循環(huán)開(kāi)解”技術(shù)要有選擇地使用,具體獲得的效果必須進(jìn)行評(píng)測(cè)。倘若代碼展開(kāi)導(dǎo)致程序尺寸過(guò)大,可能會(huì)降低 cache的命中率,未必會(huì)帶來(lái)性能上的提高。 編譯器局限性:模板的實(shí)例化通常要占用不少編譯器資源,大量的遞歸實(shí)例化會(huì)迅速拖慢編譯器甚至耗盡可用資源。 David Abrahams在 C++ Template Metaprogramming一書中介紹的 “ 遞歸開(kāi)解( Recursion Unrolling) ” 技術(shù),可以 “ 突破 ” 編譯器對(duì)模板實(shí)例化層數(shù)的限制。 Boost MPL具有內(nèi)建的 “ 遞歸開(kāi)解 “ 功能。 編譯時(shí)間延長(zhǎng):元程序被編譯器解釋執(zhí)行的, C++編譯器并不是一個(gè)好的解釋器。 可移植性較差:對(duì)于模板元編程使用的高級(jí)模板特性,不同的編譯器的支持度不同。 資源 以下是一些 C++模板元編程資源,它們或者為本幻燈片的制作提供了參考素材,或者提供了延伸知識(shí)。 [2] Todd Veldhuizen, Expression Templates, Templates/ [1] Todd Veldhuizen, Template Metaprograms , Metaprograms/ 文章 資源 [3] Todd Veldhuizen, C++ templates as partial evaluation, [5] Erwin Unruh, Prime numbers(Primzahlen Original), . [6] Erwin Unruh, Prime numbers(Primzahlen), . [4] Todd Veldhuizen, Scientific Computing: C++ versus Fortran , [7] Edward Rosten, Floating point arithmetic in C++ templates 資源 [8] David Vandervoode and Nicolai M. Josuttis. C++ Templates: The Complete Guide. AddisonWesley [11] Andrei Alexandrescu. Modern C++ Design: Generic Programming and Design Patterns Applied. AddisonWesley [9] David Abrahams, Aleksey Gurtovoy, C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond, AddisonWesley Professional. [12] Krysztof Czarnecki, Ulrich Eisenecker, Generative Programming: Methods, Tools, and Applications, AddisonWesley Professional 書籍 [10] Matthew Wilson, Imperfect C++ : Practical Solutions for RealLife Programming, AddisonWesley Professional. 資源 [13] Boost 庫(kù) [14] Blitz++ [15] Loki [16] MTL [17] FC++ The End
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1