Template metaprogramming: Difference between revisions

Content deleted Content added
JChMathae (talk | contribs)
Citation bot (talk | contribs)
Add: date, year. | Use this bot. Report bugs. | Suggested by BrownHairedGirl | Linked from User:BrownHairedGirl/Articles_with_bare_links | #UCB_webform_linked 181/648
Line 11:
The use of templates as a metaprogramming technique requires two distinct operations: a template must be defined, and a defined template must be [[Instance (computer science)|instantiated]]. The template definition describes the generic form of the generated source code, and the instantiation causes a specific set of source code to be generated from the generic form in the template.
 
Template metaprogramming is [[Turing-complete]], meaning that any computation expressible by a computer program can be computed, in some form, by a template metaprogram.<ref name=Veldhuizen2003>{{cite document|last1=Veldhuizen|first1=Todd L.|title=C++ Templates are Turing Complete|year=2003|citeseerx=10.1.1.14.3670}}</ref>
 
Templates are different from ''[[Macro (computer science)#Programming macros|macros]]''. A macro is a piece of code that executes at compile time and either performs textual manipulation of code to-be compiled (e.g. [[C++]] macros) or manipulates the [[abstract syntax tree]] being produced by the compiler (e.g. [[Rust (programming language)|Rust]] or [[Lisp (programming language)|Lisp]] macros). Textual macros are notably more independent of the syntax of the language being manipulated, as they merely change the in-memory text of the source code right before compilation.
Line 424:
* {{cite web | url = http://staff.ustc.edu.cn/~xyfeng/teaching/FOPL/lectureNotes/MetaprogrammingCpp.pdf | title = Metaprogramming in C++ | authorlink = Johannes Koskinen | first = Johannes | last = Koskinen }}
* {{cite web | url = http://lcgapp.cern.ch/project/architecture/ReflectionPaper.pdf | title = Reflection support by means of template metaprogramming | first1 = Giuseppe | last1 = Attardi | first2 = Antonio | last2 = Cisternino }}
* {{cite document | citeseerx = 10.1.1.14.5881 | title = Static data structures | first1 = Michael C. | last1 = Burton | first2 = William G. | last2 = Griswold | first3 = Andrew D. | last3 = McCulloch | first4 = Gary A. | last4 = Huber | year = 2002 }}
* {{cite web | url = http://www.codeproject.com/Articles/19989/Template-Meta-Programming-and-Number-Theory | title = Template Meta Programming and Number Theory | first = Zeeshan | last = Amjad | date = 13 August 2007 }}
* {{cite web | url = http://www.codeproject.com/Articles/20180/Template-Meta-Programming-and-Number-Theory-Part | title = Template Meta Programming and Number Theory: Part 2 | first = Zeeshan | last = Amjad | date = 24 August 2007 }}
* {{cite web | url = http://www.intelib.org/intro.html | title = A library for LISP-style programming in C++ }}