﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-why-随笔分类-模板与泛型编程</title><link>http://www.cppblog.com/why/category/15125.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 02 Nov 2010 11:57:04 GMT</lastBuildDate><pubDate>Tue, 02 Nov 2010 11:57:04 GMT</pubDate><ttl>60</ttl><item><title>关于模板元编程</title><link>http://www.cppblog.com/why/archive/2010/11/01/132008.html</link><dc:creator>why</dc:creator><author>why</author><pubDate>Mon, 01 Nov 2010 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/why/archive/2010/11/01/132008.html</guid><wfw:comment>http://www.cppblog.com/why/comments/132008.html</wfw:comment><comments>http://www.cppblog.com/why/archive/2010/11/01/132008.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/why/comments/commentRss/132008.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/why/services/trackbacks/132008.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 模板元编程（Template Metaprogramming）更准确的含义应该是&#8220;编&#8216;可以编程序的&#8217;程序&#8221;，而模板元程序（Template Metaprogram）则是&#8220;&#8216;可以编程序的&#8217;程序&#8221;。也就是说，我们给出代码的产生规则，编译器在编译期解释这些规则并生成新代码来实现我们预期的功能。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 模板元编程由于把运算由执行时提前到了编译时，所以其一个特点是运行时很快，效率很高！不过这是以编译耗时为代价的。这个作用主要体现在复杂的数值运算时。另外一个特点是能解决普通的C++程序无法解决的问题，这时才是模板元编程大显身手的时候。这个作用体现在类型识别和处理时。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为模板参数都要是编译时常量，而我们的运算需求大部分时候应该都是对变量的运算，所以我认为模板元编程解决数值运算问题可能意义不大，可能主要是用来封装在泛型库底层来完成复杂的类型处理功能。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 还有我觉得最大的问题是，模板元编程就如同正则表达式等一些技术一样，作用很强大，但是用到的地方似乎很少，以至于学习和练习都找不到施展空间~O(&#8745;_&#8745;)O~</p>
<img src ="http://www.cppblog.com/why/aggbug/132008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/why/" target="_blank">why</a> 2010-11-01 16:58 <a href="http://www.cppblog.com/why/archive/2010/11/01/132008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模板小结</title><link>http://www.cppblog.com/why/archive/2010/10/09/129224.html</link><dc:creator>why</dc:creator><author>why</author><pubDate>Sat, 09 Oct 2010 09:30:00 GMT</pubDate><guid>http://www.cppblog.com/why/archive/2010/10/09/129224.html</guid><wfw:comment>http://www.cppblog.com/why/comments/129224.html</wfw:comment><comments>http://www.cppblog.com/why/archive/2010/10/09/129224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/why/comments/commentRss/129224.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/why/services/trackbacks/129224.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---------摘自《C++ Primer中文版》&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;模板是C++语言与众不同的特性，是标准库的基础。模板是独立于类型的蓝图，编译器可以用它产生多种特定类型的实例。我们只需编写一次模板，编译器将为使用模板的不同类型实例化模板。既可以编写函数模板又可以编写类模板。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;函数模板是建立算法库的基础，类模板是建立标准库容器和迭代器类型的基础。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 非类型模板实参必须是编译时常量表达式。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编译模板需要编程环境的支持。语言为实例化模板定义了两个主要策略：包含模型和分别编译模型。这些模型规定了模板定义应该放在头文件还是源文件中，就此而言，它们影响着构建系统的方式。现在，所有编译器实现了包含模型，只有一些编译器实现了分别编译模型。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;显式模板实参使我们能够固定一个或多个模板形参的类型或值。显式实参使我们能够设计无需从对应实参推断模板类型的函数，也使我们能够对实参进行转换。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;模板特化是一种特化的定义，它定义了模板的不同版本，讲一个或多个形参绑定到特定类型或特定值。对于默认模板定义不适用的类型，特化非常有用。</p>
<img src ="http://www.cppblog.com/why/aggbug/129224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/why/" target="_blank">why</a> 2010-10-09 17:30 <a href="http://www.cppblog.com/why/archive/2010/10/09/129224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>