Підтримка
www.wikidata.uk-ua.nina.az
Shablonne metaprogramuvannya ce tehnika metaprogramuvannya v yakij shabloni vikoristovuyutsya kompilyatorom dlya stvorennya timchasovogo vihidnogo kodu yaki za dopomogoyu kompilyatora ob yednuyutsya z usim vihidnim kodom programi i kompilyuyetsya V rezultati cih shabloniv pid chas kompilyaciyi otrimuyut konstanti strukturi danih i cili funkciyi Vikoristannya shabloniv mozhna rozglyadati yak stvorennya kodu sho vikonuyetsya pid chas kompilyaciyi Cya tehnika vikoristovuyutsya ryadom mov najvidomisha z yakih C a takozh D i Deyaki movi pidtrimuyut shozhi ale ne bilsh potuzhni funkciyi chasu kompilyaciyi ce taki movi yak Lisp iz pidtrimkoyu makrosiv Komponenti shablonnogo metaprogramuvannyaVikoristannya shabloniv yak tehniki metaprogramuvannya potrebuye dvoh riznih operacij shablon maye buti viznachenij i povinen buti stvorenij jogo ekzemplyar Viznachennya shablonu opisuye zagalnu formu vihidnogo kodu a stvorennya ekzemplyaru ce jogo konkretizaciya v rezultati yakoyi stvoryuyutsya chitkij programnij kod iz zagalnoyi formi opisanoyi v shabloni Shablonne metaprogramuvannya ye povnim za Tyuringom ce oznachaye sho bud yake obchislennya zadane komp yuternoyu programoyu mozhe buti obchislene v deyakij formi za dopomogoyu shablonnogo metaprogramuvannya Shabloni vidriznyayutsya vid makrosiv Makros yakij takozh ye vlastivistyu movi programuvannya yaka dozvolyaye pisati kod sho vikonuyetsya pid chas kompilyaciyi vbudovuye zgenerovanij programnij kod shlyahom tekstovih manipulyacij i zamini Makro sistemi chasto mayut obmezheni mozhlivosti rozgaluzhennya procesu pid chas kompilyaciyi i zazvichaj nedostatnyu obiznanist pro semantiku i sistemu tipiv movi z yakoyu voni vikoristovuyutsya vinyatkom mozhe buti makrosi movi Lisp yaki sami napisani na movi Lisp i zdijsnyuyut manipulyaciyi i zamishennya kodu Lisp predstavlenogo u viglyadi struktur danih na vidminu vid tekstu Shablonni metaprogrami ne mayut nestalih zminnih tobto zhodna zminna ne mozhe zminiti znachennya pislya togo yak bula inicializovana tomu shablonne programuvannya mozhna rozglyadati yak formu funkcijnogo programuvannya Naspravdi bilshist realizacij shabloniv realizuyut kontrol za hodom vikonannya programi cherez rekursiyu yak pokazano dali v prikladi Vikoristannya shablonnogo metaprogramuvannya Hocha sintaksis shablonnogo metaprogramuvannya zazvichaj duzhe vidriznyayetsya vid movi programuvannya z yakoyu vin vikoristovuyetsya vin maye praktichnu korist Odniyeyu z prichin vikoristovuvannya shabloniv ce mozhlivist realizaciyi zagalnogo kodu programi unikayuchi shozhogo kodu sho mayut neznachni vidminnosti abo vikonuvati avtomatichnu optimizaciyu pid chas kompilyaciyi taku yak vikonannya yakoyis diyi odin raz pid chas kompilyaciyi a ne kozhen raz pid chas vikonannya programi napriklad pri nayavnosti cikliv v programi zmenshiti kilkist pidrahunku umovi vihodu z ciklu chi pidrahunku kilkosti cikliv vsyakij raz pri vikonanni programi Generaciya klasu pid chas kompilyaciyiSho naspravdi yavlyaye soboyu programuvannya pid chas kompilyaciyi mozhna pokazati na prikladi z funkciyeyu pidrahunku faktorialu yaka bez vikoristannya shabloniv C mozhe buti realizovana za dopomogoyu rekursiyi yak pokazano nizhche unsigned int factorial unsigned int n return n 0 1 n factorial n 1 Prikladi vikoristannya factorial 0 dast 1 factorial 4 dast 24 Kod navedenij v prikladi bude vikonuvatis pid chas roboti programi dlya viznachennya znachennya faktorialu dlya literaliv 4 i 0 Z vikoristannyam shablonnogo metaprogramuvannya i specializaciyi shabloniv dlya realizaciyi umovi zakinchennya dlya rekursiyi dlya faktorialiv yaki vikoristovuyutsya v programi ignoruyuchi bud yaki faktoriali yaki ne vikoristovuyutsya i mozhut buti pidrahovani pid chas kompilyaciyi za dopomogoyu cogo kodu template lt int n gt struct factorial enum value n factorial lt n 1 gt value template lt gt struct factorial lt 0 gt enum value 1 Prikladi vikoristannya factorial lt 0 gt value dast 1 factorial lt 4 gt value dast 24 Navedenij kod rozrahovuye znachennya faktoriala dlya literaliv 4 i 0 pid chas kompilyaciyi i vikoristovuye rezultat tak nibi voni ye konstantami sho buli rozrahovani zazdalegid Dlya togo shob mati zmogu vikoristovuvati shabloni takim chinom kompilyator maye znati znachennya parametru pid chas kompilyaciyi Inshimi slovami znachennya bude vidome zazdalegid lishe koli X ye konstantnim virazom V C 11 bulo dodane klyuchove slovo yake dozvolyaye kompilyatoru vikonuvati prosti konstantni virazi Vikoristovuyuchi constexpr mozhna zastosovuvati zvichajnu rekursivnu funkciyi pidrahunku faktorialu 1 16 lyutogo 2015 u Wayback Machine Optimizaciya kodu pid chas kompilyaciyiKod z pidrahunkom faktorialu navedenij ranishe ye prikladom optimizaciyi kodu pid chas kompilyaciyi pri yakij vsi znachennya faktorialiv yaki vikoristovuyutsya v programi pre kompilyuyutsya i vvodyatsya v kod yak chislovi konstanti pid chas kompilyaciyi tim samim zaoshadzhuyuchi nakladni vitrati na chas vikonannya i obsyag pam yati Ale tim ne mensh ce vidnosno ne znachna optimizaciya Yak inshij bilsh znachnij priklad rozgortannya ciklu pid chas kompilyaciyi shabloni mozhut vikoristovuvatis dlya stvorennya vektoriv klasu z dovzhinoyu n de n ne vidoma pid chas kompilyaciyi Perevagoyu nad vikoristannyam tradicijnih vektoriv z neviznachenoyu dovzhinoyu ye te sho cikli mozhut buti rozgornuti sho daye mozhlivist optimizuvati kod Napriklad rozglyanemo Sumuvannya vektora dovzhinoyu n mozhe buti zapisane yak template lt int length gt Vector lt length gt amp Vector lt length gt operator const Vector lt length gt amp rhs for int i 0 i lt length i value i rhs value i return this Koli kompilyator stvoryuye ekzemplyar shablonnoyi funkciyi opisanoyi vishe mozhe buti otrimanij nastupnij kod template lt gt Vector lt 2 gt amp Vector lt 2 gt operator const Vector lt 2 gt amp rhs value 0 rhs value 0 value 1 rhs value 1 return this mozhe rozgornuti cikl for oskilki parametr shablonu length sho zadaye jogo dovzhinu vidomij pid chas kompilyaciyi Odnak slid mati na uvazi sho ce mozhe prizvesti do znachnogo rozrostannya ob yemu kodu yakij generuyetsya dlya kozhnogo N rozmir vektora ekzemplyar yakogo vi stvorili Statichnij polimorfizmPolimorfizm ye zagalnoyu standartnoyu mozhlivistyu programuvannya zavdyaki yakij ob yekti nashadki mozhut buti vikoristani yak ekzemplyari ob yektiv yih bazovogo tipu ale iz zdijsnennyam viklikiv metodiv cih dochirnih ob yektiv yak v navedenomu prikladi class Base public virtual void method std cout lt lt Base virtual Base class Derived public Base public virtual void method std cout lt lt Derived int main Base pBase new Derived pBase gt method outputs Derived delete pBase return 0 De vsi vikliki virtualnih metodiv iz klyuchovim slovom virtual budut viklikati metodi najnizhchih klasiv v iyerarhiyi nasliduvannya Cya dinamichna polimorfna povedinka zazvichaj dosyagayetsya vikoristannyam specialnih virtualnih tablic funkcij dlya klasiv iz virtualnimi metodami po cim tablicyam zdijsnyuyetsya prohid pid chas vikonannya dlya znahodzhennya metodu yakij neobhidno viklikati Takim chinom polimorfizm pid chas vikonannya obov yazkovo maye dodatkovi vitrati na vikonannya kodu hocha dlya suchasnih arhitektur ci nakladni vitrati mali Tim ne mensh v bagatoh vipadkah polimorfna povedinka yaka potrebuyetsya v kodi invariantna i mozhe buti viznachena pid chas kompilyaciyi Todi mozhe buti vikoristanij shablon recurring template pattern dlya dosyagnennya efektu statichnogo polimorfizmu yakij ye imitaciyeyu polimorfizmu u viglyadi programnogo kodu ale vin virishuyetsya pid chas kompilyaciyi i tomu ne potrebuye zvernen do virtualnih tablic pid chas vikonannya Napriklad template lt class Derived gt struct base void interface static cast lt Derived gt this gt implementation struct derived base lt derived gt void implementation Tut shablon bazovogo klasu koristuyetsya tim sho realizaciyi funkciyi chlena inicializuyutsya lishe pislya yih ogoloshennya i vin bude vikoristovuvati chleni pohidnogo klasu u svoyih vlasnih funkciyami cherez vikoristannya statichnogo privedennya tipiv static cast takim chinom pri kompilyaciyi stvoryuyutsya ob yekt yakij maye polimorfni harakteristiki Yak priklad naglyadnogo vikoristannya taka tehnika vikoristana v biblioteci Boost dlya stvorennya iteratoriv 2 24 lipnya 2008 u Wayback Machine Inshij podibnij priklad vikoristannya ce Barton Nackman trick yakij inodi nazivayut obmezhenim rozshirennyam shablonu restricted template expansion de spilna funkcionalnist rozmishuyetsya v bazovomu klasi yakij vikoristovuyetsya ne yak umovnij a yak neobhidnij komponent dlya zabezpechennya sumisnoyi povedinki minimizuyuchi nadmirnist kodu Perevagi ta nedoliki shablonnogo metaprogramuvannyaKompromis mizh chasom kompilyaciyi i chasom vikonannya Pri znachnomu zastosuvanni shablonnogo metoprogramuvannya kompilyaciya mozhe stati povilnoyu V zalezhnosti vid sposobu vikoristannya shabloni mozhut kompilyuvatisya shvidshe abo povilnishe nizh rozgornutij kod Uzagalnene programuvannya Shablonne metoprogramuvannya dozvolyaye programistu zosereditisya na arhitekturi i deleguvati kompilyaciyu stvorennya bud yakoyi realizaciyi neobhidnih u kliyentskomu kodi Takim chinom shablonne metaprogramuvannya mozhe vtilyuvati po spravzhnomu universalnij kod minimizuyuchi kod i polegshuyuchi jogo pidtrimku Chitabelnist Sho stosuyetsya movi C sintaksis i idiomi shablonnogo programuvannya tayemnichi v porivnyanni zi zvichajnim programuvannyam na C i shablonni metaprogrami mozhut buti vazhkimi dlya rozuminnya Takim chinom metaprogrami mozhut viklikati skladnosti pri yih pidtrimci u nedosvidchenih v shablonnomu programuvannya programistiv v zalezhnosti vid skladnosti sintaksisu i realizaciyi Div takozhMetaprogramuvannya PreprocesorPrimitkiVeldhuizen Todd L PDF http ubietylab net Indiana U CS dept Arhiv originalu PDF za 23 listopada 2015 Procitovano 18 grudnya 2014 DSL implementation in metaocaml template haskell and C University of Waterloo University of Glasgow Research Centre Julich Rice University 2004 z dzherela 5 bereznya 2016 Procitovano 16 lyutogo 2015 Template Meta programming for Haskell ACM 1 58113 415 0 01 0009 2002 z dzherela 1 bereznya 2015 Procitovano 16 lyutogo 2015 Generative Programming Methods Tools and Applications Addison Wesley ISBN 0 201 30977 7 Modern C Design Generic Programming and Design Patterns Applied Addison Wesley ISBN 3 8266 1347 3 2005 C Template Metaprogramming Concepts Tools and Techniques from Boost and Beyond Addison Wesley ISBN 0 321 22725 5 2003 C Templates The Complete Guide Addison Wesley ISBN 0 201 73484 2 Reflection in Rewriting Logic Metalogical Foundations and Metaprogramming Applications ISBN 1 57586 238 7 Zovnishni posilannya Arhiv originalu za 13 sichnya 2008 Procitovano 16 lyutogo 2015 Arhiv originalu za 17 travnya 2008 Procitovano 16 lyutogo 2015 built using template metaprogramming Arhiv originalu za 16 travnya 2008 Procitovano 16 lyutogo 2015 use STL algorithms easily Veldhuizen Todd May 1995 C Report 7 4 36 43 Arhiv originalu za 4 bereznya 2009 Procitovano 16 lyutogo 2015 Arhiv originalu za 3 sichnya 2015 Procitovano 16 lyutogo 2015 type safe metaprogramming in Haskell Bright Walter Arhiv originalu za 7 lyutogo 2021 Procitovano 16 lyutogo 2015 template metaprogramming in the D programming language PDF Arhiv originalu PDF za 28 serpnya 2014 Procitovano 16 lyutogo 2015 Attardi Giuseppe Cisternino Antonio PDF Arhiv originalu PDF za 3 bereznya 2016 Procitovano 16 lyutogo 2015 STATIC DATA STRUCTURES Amjad Zeeshan Arhiv originalu za 3 sichnya 2012 Procitovano 16 lyutogo 2015 Amjad Zeeshan Arhiv originalu za 30 grudnya 2011 Procitovano 16 lyutogo 2015 Arhiv originalu za 14 sichnya 2015 Procitovano 16 lyutogo 2015
Топ