{"id":5201,"date":"2025-06-11T12:39:48","date_gmt":"2025-06-11T04:39:48","guid":{"rendered":"https:\/\/www.diggoodbox.com\/blog\/?p=5201"},"modified":"2025-06-11T12:39:48","modified_gmt":"2025-06-11T04:39:48","slug":"%e7%8e%b0%e4%bb%a3c%e6%a8%a1%e6%9d%bf%e5%87%bd%e6%95%b0%e4%b8%8e%e6%a8%a1%e6%9d%bf%e7%b1%bb%e6%80%bb%e7%bb%93modern-c-template-functions-classes-summary","status":"publish","type":"post","link":"https:\/\/www.diggoodbox.com\/blog\/?p=5201","title":{"rendered":"\u73b0\u4ee3C++\u6a21\u677f\u51fd\u6570\u4e0e\u6a21\u677f\u7c7b\u603b\u7ed3(Modern C++ Template Functions &amp; Classes Summary)"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>\u4e2d\u6587<\/strong><\/td><td><strong>English<\/strong><\/td><\/tr><tr><td><strong>1. \u6a21\u677f\u57fa\u7840<\/strong><\/td><td><strong>1. Template Basics<\/strong><\/td><\/tr><tr><td>&#8211; \u6a21\u677f\u662f\u6cdb\u578b\u7f16\u7a0b\u7684\u6838\u5fc3\u673a\u5236\uff0c\u5b9e\u73b0\u4ee3\u7801\u590d\u7528\u3002<\/td><td>&#8211; Templates enable generic programming, facilitating code reuse.<\/td><\/tr><tr><td>&#8211; \u6a21\u677f\u51fd\u6570\u548c\u6a21\u677f\u7c7b\u5141\u8bb8\u7c7b\u578b\u53c2\u6570\u5316\u3002<\/td><td>&#8211; Template functions and classes allow parameterization by types.<\/td><\/tr><tr><td>&#8211; \u8bed\u6cd5\u793a\u4f8b\uff1a<\/td><td>&#8211; Syntax example:<\/td><\/tr><tr><td>&#8220;`cpp<\/td><td>&#8220;`cpp<\/td><\/tr><tr><td>template&lt;typename T&gt;<\/td><td>template&lt;typename T&gt;<\/td><\/tr><tr><td>T max(T a, T b) { return a &gt; b ? a : b; }<\/td><td>T max(T a, T b) { return a &gt; b ? a : b; }<\/td><\/tr><tr><td>&#8220;`<\/td><td>&#8220;`<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><strong>2. \u6a21\u677f\u51fd\u6570<\/strong><\/td><td><strong>2. Template Functions<\/strong><\/td><\/tr><tr><td>&#8211; \u652f\u6301\u51fd\u6570\u91cd\u8f7d\u548c\u6a21\u677f\u91cd\u8f7d\uff0c\u6839\u636e\u53c2\u6570\u7c7b\u578b\u81ea\u52a8\u63a8\u5bfc\u3002<\/td><td>&#8211; Support function overloading and template overloading, with automatic type deduction.<\/td><\/tr><tr><td>&#8211; \u652f\u6301\u975e\u7c7b\u578b\u6a21\u677f\u53c2\u6570\uff0c\u5982\u6574\u6570\u3001\u6307\u9488\u7b49\u3002<\/td><td>&#8211; Support non-type template parameters like integers, pointers, etc.<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><strong>3. \u6a21\u677f\u7c7b<\/strong><\/td><td><strong>3. Template Classes<\/strong><\/td><\/tr><tr><td>&#8211; \u7c7b\u6a21\u677f\u53c2\u6570\u5316\u7c7b\u578b\uff0c\u5b9e\u73b0\u901a\u7528\u6570\u636e\u7ed3\u6784\u3002<\/td><td>&#8211; Class templates parameterize types for generic data structures.<\/td><\/tr><tr><td>&#8211; \u793a\u4f8b\uff1a<\/td><td>&#8211; Example:<\/td><\/tr><tr><td>&#8220;`cpp<\/td><td>&#8220;`cpp<\/td><\/tr><tr><td>template&lt;typename T&gt;<\/td><td>template&lt;typename T&gt;<\/td><\/tr><tr><td>class Container {<\/td><td>class Container {<\/td><\/tr><tr><td>T value;<\/td><td>T value;<\/td><\/tr><tr><td>public:<\/td><td>public:<\/td><\/tr><tr><td>Container(T v) : value(v) {}<\/td><td>Container(T v) : value(v) {}<\/td><\/tr><tr><td>T get() { return value; }<\/td><td>T get() { return value; }<\/td><\/tr><tr><td>};<\/td><td>};<\/td><\/tr><tr><td>&#8220;`<\/td><td>&#8220;`<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><strong>4. \u6a21\u677f\u7279\u5316<\/strong><\/td><td><strong>4. Template Specialization<\/strong><\/td><\/tr><tr><td>&#8211; \u5168\u7279\u5316\uff1a\u4e3a\u7279\u5b9a\u7c7b\u578b\u63d0\u4f9b\u7279\u6b8a\u5b9e\u73b0\u3002<\/td><td>&#8211; Full specialization: provide special implementation for specific types.<\/td><\/tr><tr><td>&#8211; \u504f\u7279\u5316\uff08\u4ec5\u7c7b\u6a21\u677f\u652f\u6301\uff09\uff1a\u9488\u5bf9\u90e8\u5206\u6a21\u677f\u53c2\u6570\u505a\u7279\u6b8a\u5904\u7406\u3002<\/td><td>&#8211; Partial specialization (only class templates): specialize some template parameters.<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><strong>5. \u73b0\u4ee3C++\u5bf9\u6a21\u677f\u7684\u589e\u5f3a<\/strong><\/td><td><strong>5. Modern C++ Enhancements to Templates<\/strong><\/td><\/tr><tr><td>&#8211; <strong>\u81ea\u52a8\u7c7b\u578b\u63a8\u5bfc\uff08C++11\uff09<\/strong>\uff1a\u4f7f\u7528auto\u548cdecltype\u7b80\u5316\u6a21\u677f\u4ee3\u7801\u3002<\/td><td>&#8211; <strong>Type deduction (C++11)<\/strong>: use auto and decltype to simplify template code.<\/td><\/tr><tr><td>&#8211; <strong>\u522b\u540d\u6a21\u677f\uff08C++11\uff09<\/strong>\uff1a\u4f7f\u7528using\u5b9a\u4e49\u6a21\u677f\u522b\u540d\u3002<\/td><td>&#8211; <strong>Alias templates (C++11)<\/strong>: use using to create template aliases.<\/td><\/tr><tr><td>&#8211; <strong>\u53ef\u53d8\u53c2\u6570\u6a21\u677f\uff08C++11\uff09<\/strong>\uff1a\u652f\u6301\u4efb\u610f\u6570\u91cf\u6a21\u677f\u53c2\u6570\uff0c\u5b9e\u73b0\u6a21\u677f\u5143\u7f16\u7a0b\u3002<\/td><td>&#8211; <strong>Variadic templates (C++11)<\/strong>: support arbitrary number of template parameters.<\/td><\/tr><tr><td>&#8211; <strong>constexpr<\/strong><strong> \u4e0e\u6a21\u677f\u7ed3\u5408\uff08C++11\u53ca\u4ee5\u540e\uff09<\/strong>\uff1a\u7f16\u8bd1\u671f\u8ba1\u7b97\uff0c\u63d0\u9ad8\u6027\u80fd\u3002<\/td><td>&#8211; <strong>constexpr<\/strong><strong> with templates (C++11+)<\/strong>: enable compile-time computation.<\/td><\/tr><tr><td>&#8211; <strong>\u6982\u5ff5\uff08Concepts\uff0cC++20\uff09<\/strong>\uff1a\u5b9a\u4e49\u6a21\u677f\u53c2\u6570\u7ea6\u675f\uff0c\u63d0\u5347\u6a21\u677f\u4ee3\u7801\u53ef\u8bfb\u6027\u548c\u5b89\u5168\u6027\u3002<\/td><td>&#8211; <strong>Concepts (C++20)<\/strong>: constrain template parameters for readability and safety.<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><strong>6. \u53ef\u53d8\u53c2\u6570\u6a21\u677f\u793a\u4f8b<\/strong><\/td><td><strong>6. Variadic Template Example<\/strong><\/td><\/tr><tr><td>&#8220;`cpp<\/td><td>&#8220;`cpp<\/td><\/tr><tr><td>template&lt;typename T&gt;<\/td><td>template&lt;typename T&gt;<\/td><\/tr><tr><td>void print(T t) { std::cout &lt;&lt; t &lt;&lt; std::endl; }<\/td><td>void print(T t) { std::cout &lt;&lt; t &lt;&lt; std::endl; }<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td>template&lt;typename T, typename&#8230; Args&gt;<\/td><td>template&lt;typename T, typename&#8230; Args&gt;<\/td><\/tr><tr><td>void print(T t, Args&#8230; args) {<\/td><td>void print(T t, Args&#8230; args) {<\/td><\/tr><tr><td>std::cout &lt;&lt; t &lt;&lt; &#8220;, &#8220;;<\/td><td>std::cout &lt;&lt; t &lt;&lt; &#8220;, &#8220;;<\/td><\/tr><tr><td>print(args&#8230;);<\/td><td>print(args&#8230;);<\/td><\/tr><tr><td>}<\/td><td>}<\/td><\/tr><tr><td>&#8220;`<\/td><td>&#8220;`<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><strong>7. \u6982\u5ff5\uff08Concepts\uff09\u793a\u4f8b\uff08C++20\uff09<\/strong><\/td><td><strong>7. Concepts Example (C++20)<\/strong><\/td><\/tr><tr><td>&#8220;`cpp<\/td><td>&#8220;`cpp<\/td><\/tr><tr><td>template&lt;typename T&gt; requires std::integral&lt;T&gt;<\/td><td>template&lt;typename T&gt; requires std::integral&lt;T&gt;<\/td><\/tr><tr><td>T add(T a, T b) { return a + b; }<\/td><td>T add(T a, T b) { return a + b; }<\/td><\/tr><tr><td>&#8220;`<\/td><td>&#8220;`<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u6587\u5bf9C++\u7684\u6a21\u677f\u51fd\u6570\u548c\u6a21\u677f\u7c7b\u8fdb\u884c\u603b\u7ed3\uff0c\u5305\u62ec\u6982\u5ff5\u3001\u6a21\u677f\u7279\u5316\u3001\u53ef\u53d8\u53c2\u6570\u7b49\u5185\u5bb9\uff0c\u5927\u5bb6\u53ef\u53c2\u7167\u5b66\u4e60\u5e76\u5b9e\u8df5\u3002<\/p>\n","protected":false},"author":1,"featured_media":5194,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[17],"tags":[20,21,25,23,22],"class_list":["post-5201","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology","tag-c","tag-21","tag-25","tag-23","tag-22"],"_links":{"self":[{"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5201"}],"version-history":[{"count":1,"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5201\/revisions"}],"predecessor-version":[{"id":5202,"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5201\/revisions\/5202"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=\/wp\/v2\/media\/5194"}],"wp:attachment":[{"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}