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

正文內(nèi)容

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

2024-10-09 14:39本頁面
  

【正文】 Traits用作 MPL的基礎(chǔ)。 MPL是一個通用的模板元編程框架,它仿照 STL提供了編譯期算法、序列、迭代器等元編程組件。它為普通程序員進行元編程提供了高級抽象,使得元編程變得容易、高效、富有樂趣。 Boost Type Traits庫包含一系列 traits類,用于萃取 C++類型特征。另外還包含了一些轉(zhuǎn)換 traits(例如移除一個類型的 const修飾符等)。 Boost Static Assert庫用于編譯期斷言,如果評估的表達式編譯時計算結(jié)果為 true,則代碼可以通過編譯,否則編譯報錯。 DSEL 對于領(lǐng)域特定的嵌入式語言 ( domainspecific embedded language, DSEL) 的設(shè)計者而言, 模板元編程技術(shù)是一件利器。這里的 DSEL就是庫,例如一些圖形或矩陣計算庫都可被認為是一種小型語言: 其接口定義語法,其實現(xiàn)定義語義。它們均提供了領(lǐng)域特定的符號、構(gòu)造和抽象 。 利用模板元編程技術(shù)構(gòu)建的 DSEL,高效且語法接近于從頭構(gòu)建的語言。由于這種 DSEL采用純粹的 C++編寫,與使用獨立的 DSL相比,無需再使用專門的編譯器、編輯器等工具,從而可以消除跨語言邊界所需付出的代價。 如欲進一步了解采用 C++模板元編程實現(xiàn) DSEL,參見 [注 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庫的幾個例子: 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é)語 模板元程序與常規(guī)代碼結(jié)合使用時,此時源代碼包含兩種程序:常規(guī)C++運行期程序和編譯期運行的模板元程序。當(dāng)被編譯器解釋時,模板元程序可以生成高效的代碼,從而可以大幅提高最終應(yīng)用程序的運行效率。 通過將計算從運行期轉(zhuǎn)移至編譯期,在結(jié)果程序啟動之前做盡可能多的工作,最終獲得速度更快的程序。 模板元編程也有一些局限性,使用模板元編程時(尤其使用模板元編程進行數(shù)值計算時)存在一些注意事項 …… 調(diào)試困難:元程序執(zhí)行于編譯期,沒有用于單步跟蹤元程序執(zhí)行的調(diào)試器(用于設(shè)臵斷點、察看數(shù)據(jù)等)。程序員可做的只能是等待編譯過程失敗,然后人工破譯編譯器傾瀉到屏幕上的錯誤信息。 代碼的可讀性較差。 結(jié)語 結(jié)果程序性能未必一定最優(yōu)化:“循環(huán)開解”技術(shù)要有選擇地使用,具體獲得的效果必須進行評測。倘若代碼展開導(dǎo)致程序尺寸過大,可能會降低 cache的命中率,未必會帶來性能上的提高。 編譯器局限性:模板的實例化通常要占用不少編譯器資源,大量的遞歸實例化會迅速拖慢編譯器甚至耗盡可用資源。 David Abrahams在 C++ Template Metaprogramming一書中介紹的 “ 遞歸開解( Recursion Unrolling) ” 技術(shù),可以 “ 突破 ” 編譯器對模板實例化層數(shù)的限制。 Boost MPL具有內(nèi)建的 “ 遞歸開解 “ 功能。 編譯時間延長:元程序被編譯器解釋執(zhí)行的, C++編譯器并不是一個好的解釋器。 可移植性較差:對于模板元編程使用的高級模板特性,不同的編譯器的支持度不同。 資源 以下是一些 C++模板元編程資源,它們或者為本幻燈片的制作提供了參考素材,或者提供了延伸知識。 [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 庫 [14] Blitz++ [15] Loki [16] MTL [17] FC++ The End
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1