Files
hustoj/web/cppreference-zh/chmhelp/cpp-language-templates.html
2025-08-01 12:57:54 +08:00

269 lines
27 KiB
HTML

<!DOCTYPE html>
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>&#27169;&#26495;</title>
<link rel="stylesheet" href="ext.css" />
<link rel="stylesheet" href="site_modules.css" />
</head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_language_templates skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#27169;&#26495;</h1>
<div id="bodyContent">
<div id="contentSub"><span class="subpages">&lt; <a href="cpp.html">cpp</a>&lrm; | <a href="cpp-language.html">language</a></span></div>
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
<p>&#27169;&#26495;&#26159;&#19968;&#20010; C++ &#23454;&#20307;&#65292;&#23427;&#23450;&#20041;&#20197;&#19979;&#20854;&#19968;&#65306;</p>
<ul>
<li>&#19968;&#26063;&#31867;&#65288;<a href="cpp-language-class_template.html">&#31867;&#27169;&#26495;</a>&#65289;&#65292;&#21487;&#20197;&#26159;<a href="cpp-language-member_template.html">&#23884;&#22871;&#31867;</a></li>
<li>&#19968;&#26063;&#20989;&#25968;&#65288;<a href="cpp-language-function_template.html">&#20989;&#25968;&#27169;&#26495;</a>&#65289;&#65292;&#21487;&#20197;&#26159;<a href="cpp-language-member_template.html">&#25104;&#21592;&#20989;&#25968;</a></li>
</ul>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<ul>
<li>&#19968;&#26063;&#31867;&#22411;&#30340;&#21035;&#21517;&#65288;<a href="cpp-language-type_alias.html">&#21035;&#21517;&#27169;&#26495;</a>&#65289;</li>
</ul>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx14">
<td>
<ul>
<li>&#19968;&#26063;&#21464;&#37327;&#65288;<a href="cpp-language-variable_template.html">&#21464;&#37327;&#27169;&#26495;</a>&#65289;</li>
</ul>
</td>
<td><span class="t-mark-rev t-since-cxx14">(C++14 &#36215;)</span></td>
</tr>
</table>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx20">
<td>
<ul>
<li>&#27010;&#24565;&#65288;<a href="cpp-language-constraints.html">&#32422;&#26463;&#19982;&#27010;&#24565;</a>&#65289;</li>
</ul>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
</table>
<p>&#27169;&#26495;&#20197;&#19968;&#20010;&#25110;&#22810;&#20010;<a href="cpp-language-template_parameters.html">&#27169;&#26495;&#24418;&#21442;</a>&#21442;&#25968;&#21270;&#65292;&#24418;&#21442;&#26377;&#19977;&#31181;&#65306;&#31867;&#22411;&#27169;&#26495;&#24418;&#21442;&#12289;&#38750;&#31867;&#22411;&#27169;&#26495;&#24418;&#21442;&#21644;&#27169;&#26495;&#27169;&#26495;&#24418;&#21442;&#12290;</p>
<p>&#24403;&#25552;&#20379;&#20102;&#27169;&#26495;&#23454;&#21442;&#65292;&#25110;&#24403;<a href="cpp-language-function_template.html#.E6.A8.A1.E6.9D.BF.E5.8F.82.E6.95.B0.E6.8E.A8.E5.AF.BC">&#20989;&#25968;</a>&#27169;&#26495;<span class="t-rev-inl t-since-cxx17"><span>&#25110;<a href="cpp-language-class_template_argument_deduction.html">&#31867;</a></span> <span><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></span></span>&#27169;&#26495;&#30340;&#27169;&#26495;&#23454;&#21442;&#34987;&#25512;&#23548;&#20986;&#26102;&#65292;&#23427;&#20204;&#26367;&#25442;&#21508;&#27169;&#26495;&#24418;&#21442;&#65292;&#20197;&#33719;&#24471;&#27169;&#26495;&#30340;&#19968;&#20010;<i>&#29305;&#21270;&#65288;specialization&#65289;</i>&#65292;&#21363;&#19968;&#20010;&#29305;&#23450;&#31867;&#22411;&#25110;&#19968;&#20010;&#29305;&#23450;&#20989;&#25968;&#24038;&#20540;&#12290;&#29305;&#21270;&#20063;&#21487;&#20197;&#26174;&#24335;&#25552;&#20379;&#65306;&#23545;&#31867;<span class="t-rev-inl t-since-cxx14"><span>&#12289;&#21464;&#37327;</span> <span><span class="t-mark-rev t-since-cxx14">(C++14 &#36215;)</span></span></span>&#21644;&#20989;&#25968;&#27169;&#26495;&#37117;&#20801;&#35768;<a href="cpp-language-template_specialization.html">&#20840;&#29305;&#21270;</a>&#65292;&#21482;&#20801;&#35768;&#23545;&#31867;&#27169;&#26495;<span class="t-rev-inl t-since-cxx14"><span>&#21644;&#21464;&#37327;&#27169;&#26495;</span> <span><span class="t-mark-rev t-since-cxx14">(C++14 &#36215;)</span></span></span><a href="cpp-language-partial_specialization.html">&#37096;&#20998;&#29305;&#21270;</a>&#12290;</p>
<p>&#22312;&#35201;&#27714;&#23436;&#25972;&#23545;&#35937;&#31867;&#22411;&#30340;&#35821;&#22659;&#20013;&#24341;&#29992;&#26576;&#20010;&#31867;&#27169;&#26495;&#29305;&#21270;&#26102;&#65292;&#25110;&#22312;&#35201;&#27714;&#20989;&#25968;&#23450;&#20041;&#23384;&#22312;&#30340;&#35821;&#22659;&#20013;&#24341;&#29992;&#26576;&#20010;&#20989;&#25968;&#27169;&#26495;&#29305;&#21270;&#26102;&#65292;&#38500;&#38750;&#27169;&#26495;&#24050;&#32463;&#34987;&#26174;&#24335;&#29305;&#21270;&#25110;&#26174;&#24335;&#23454;&#20363;&#21270;&#65292;&#21542;&#21017;&#27169;&#26495;&#21363;&#34987;<i>&#23454;&#20363;&#21270;&#65288;instantiate&#65289;</i>&#65288;&#23427;&#30340;&#20195;&#30721;&#34987;&#23454;&#38469;&#32534;&#35793;&#65289;&#12290;&#31867;&#27169;&#26495;&#30340;&#23454;&#20363;&#21270;&#19981;&#20250;&#23454;&#20363;&#21270;&#20854;&#20219;&#20309;&#25104;&#21592;&#20989;&#25968;&#65292;&#38500;&#38750;&#23427;&#20204;&#20063;&#34987;&#20351;&#29992;&#12290;&#22312;&#36830;&#25509;&#26102;&#65292;&#19981;&#21516;&#32763;&#35793;&#21333;&#20803;&#29983;&#25104;&#30340;&#30456;&#21516;&#23454;&#20363;&#34987;&#21512;&#24182;&#12290;</p>
<p>&#27169;&#26495;&#30340;&#23450;&#20041;&#24517;&#39035;&#22312;&#38544;&#24335;&#23454;&#20363;&#21270;&#28857;&#21487;&#35265;&#65292;&#36825;&#23601;&#26159;&#27169;&#26495;&#24211;&#36890;&#24120;&#37117;&#22312;&#22836;&#25991;&#20214;&#20013;&#25552;&#20379;&#25152;&#26377;&#27169;&#26495;&#23450;&#20041;&#30340;&#21407;&#22240;&#65288;&#20363;&#22914;<a rel="nofollow" class="external text" href="http://www.boost.org/doc/libs/release/more/getting_started/unix-variants.html#header-only-libraries">&#22823;&#22810;&#25968; boost &#24211;&#21482;&#26377;&#22836;&#25991;&#20214;</a>&#65289;</p>
<h3><span class="mw-headline" id=".E8.AF.AD.E6.B3.95">&#35821;&#27861;</span></h3>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>template</b></code> <code><b>&lt;</b></code> <span class="t-spar">&#24418;&#21442;&#21015;&#34920;</span> <code><b>&gt;</b></code> <span class="t-spar">requires&#23376;&#21477;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#22768;&#26126;</span></td>
<td>(1)</td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>export</b></code> <code><b>template</b></code> <code><b>&lt;</b></code> <span class="t-spar">&#24418;&#21442;&#21015;&#34920;</span> <code><b>&gt;</b></code> <span class="t-spar">&#22768;&#26126;</span></td>
<td>(2)</td>
<td><span class="t-mark-rev t-until-cxx11">(C++11 &#21069;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td><code><b>template</b></code> <code><b>&lt;</b></code> <span class="t-spar">&#24418;&#21442;&#21015;&#34920;</span> <code><b>&gt;</b></code> <code><b>concept</b></code> <span class="t-spar">&#27010;&#24565;&#21517;</span> <code><b>=</b></code> <span class="t-spar">&#32422;&#26463;&#34920;&#36798;&#24335;</span> <code><b>;</b></code></td>
<td>(3)</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<table class="t-par-begin">
<tr class="t-par">
<td><span class="t-spar">&#24418;&#21442;&#21015;&#34920;</span></td>
<td>-</td>
<td>&#38750;&#31354;&#30340;<a href="cpp-language-template_parameters.html">&#27169;&#26495;&#24418;&#21442;</a>&#30340;&#36887;&#21495;&#20998;&#38548;&#21015;&#34920;&#65292;&#20854;&#20013;&#27599;&#39033;&#26159;<a href="cpp-language-template_parameters.html#.E9.9D.9E.E7.B1.BB.E5.9E.8B.E6.A8.A1.E6.9D.BF.E5.BD.A2.E5.8F.82">&#38750;&#31867;&#22411;&#24418;&#21442;</a>&#12289;<a href="cpp-language-template_parameters.html#.E7.B1.BB.E5.9E.8B.E6.A8.A1.E6.9D.BF.E5.BD.A2.E5.8F.82">&#31867;&#22411;&#24418;&#21442;</a>&#12289;<a href="cpp-language-template_parameters.html#.E6.A8.A1.E6.9D.BF.E6.A8.A1.E6.9D.BF.E5.BD.A2.E5.8F.82">&#27169;&#26495;&#24418;&#21442;</a>&#25110;&#20219;&#20309;&#36825;&#20123;&#30340;<a href="cpp-language-parameter_pack.html">&#24418;&#21442;&#21253;</a>&#20043;&#19968;&#12290;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">requires&#23376;&#21477;</span></td>
<td>-</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span> &#25351;&#23450;&#20102;&#21508;&#27169;&#26495;&#23454;&#21442;&#19978;&#30340;<a href="cpp-language-constraints.html">&#32422;&#26463;</a>&#30340; <a href="cpp-language-constraints.html#requires_.E5.AD.90.E5.8F.A5"><span class="t-spar">requires&#23376;&#21477;</span></a>&#12290;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#22768;&#26126;</span></td>
<td>-</td>
<td><a href="cpp-language-class_template.html">&#31867;&#65288;&#21253;&#25324; struct &#21644; union&#65289;</a>&#65292;<a href="cpp-language-member_template.html">&#25104;&#21592;&#31867;&#25110;&#25104;&#21592;&#26522;&#20030;&#31867;&#22411;</a>&#65292;<a href="cpp-language-function_template.html">&#20989;&#25968;</a>&#25110;<a href="cpp-language-member_template.html">&#25104;&#21592;&#20989;&#25968;</a>&#65292;&#21629;&#21517;&#31354;&#38388;&#20316;&#29992;&#22495;&#30340;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;&#65292;<span class="t-rev-inl t-since-cxx14"><span><a href="cpp-language-variable_template.html">&#21464;&#37327;&#25110;&#31867;&#20316;&#29992;&#22495;&#30340;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;</a>&#65292;</span> <span><span class="t-mark-rev t-since-cxx14">(C++14 &#36215;)</span></span></span><span class="t-rev-inl t-since-cxx11"><span>&#25110;<a href="cpp-language-type_alias.html">&#21035;&#21517;&#27169;&#26495;</a></span> <span><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></span></span>&#30340;&#22768;&#26126;&#12290;&#23427;&#20063;&#21487;&#20197;&#23450;&#20041;<a href="cpp-language-template_specialization.html">&#27169;&#26495;&#29305;&#21270;</a>&#12290;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#27010;&#24565;&#21517;</span><br />
<span class="t-spar">&#32422;&#26463;&#34920;&#36798;&#24335;</span></td>
<td>-</td>
<td>&#35265;<a href="cpp-language-constraints.html">&#32422;&#26463;&#19982;&#27010;&#24565;</a></td>
</tr>
</table>
<table class="t-rev-begin">
<tr class="t-rev t-until-cxx11">
<td>
<p><code>export</code> &#26159;&#19968;&#20010;&#21487;&#36873;&#30340;&#20462;&#39280;&#31526;&#65292;&#22768;&#26126;&#27169;&#26495;<i>&#34987;&#23548;&#20986;</i>&#65288;&#29992;&#20110;&#31867;&#27169;&#26495;&#26102;&#65292;&#23427;&#22768;&#26126;&#35813;&#31867;&#30340;&#25152;&#26377;&#25104;&#21592;&#20063;&#34987;&#23548;&#20986;&#65289;&#12290;&#23545;&#34987;&#23548;&#20986;&#27169;&#26495;&#36827;&#34892;&#23454;&#20363;&#21270;&#30340;&#25991;&#20214;&#19981;&#38656;&#35201;&#21253;&#21547;&#20854;&#23450;&#20041;&#65306;&#26377;&#22768;&#26126;&#23601;&#36275;&#22815;&#20102;&#12290;<code>export</code> &#30340;&#23454;&#29616;&#31232;&#23569;&#32780;&#19988;&#22312;&#32454;&#33410;&#19978;&#20114;&#19981;&#19968;&#33268;&#12290;</p>
</td>
<td><span class="t-mark-rev t-until-cxx11">(C++11 &#21069;)</span></td>
</tr>
</table>
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style="">
<tr>
<td class="mbox-empty-cell"></td>
<td class="mbox-text" style="">&#26412;&#33410;&#26410;&#23436;&#25104;<br />
&#21407;&#22240;&#65306;&#26680;&#24515;&#35821;&#27861;&#65292;&#27169;&#26495;&#24418;&#21442;&#65292;&#20197;&#21450;&#23454;&#20363;&#21270;&#65292;&#24102;&#20986; class_template &#21644; function_template &#38388;&#30340;&#20844;&#20849;&#20869;&#23481;</td>
</tr>
</table>
<h3><span class="mw-headline" id=".E6.A8.A1.E6.9D.BF.E6.A0.87.E8.AF.86">&#27169;&#26495;&#26631;&#35782;</span></h3>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td class="t-sdsc-nopad"><span class="t-spar">&#27169;&#26495;&#21517;</span> <code><b>&lt;</b></code> <span class="t-spar">&#24418;&#21442;&#21015;&#34920;</span> <code><b>&gt;</b></code></td>
<td class="t-sdsc-nopad"></td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<table class="t-par-begin">
<tr class="t-par">
<td><span class="t-spar">&#27169;&#26495;&#21517;</span></td>
<td>-</td>
<td>&#25351;&#21517;&#27169;&#26495;&#30340;<a href="cpp-language-identifiers.html">&#26631;&#35782;&#31526;</a>&#65288;&#36825;&#31181;&#24773;&#20917;&#19979;&#31216;&#20043;&#20026; &quot;<span class="t-spar">&#31616;&#21333;&#27169;&#26495;&#26631;&#35782;</span>&quot;&#65289;&#65292;&#25110;&#37325;&#36733;&#36816;&#31639;&#31526;&#27169;&#26495;&#25110;&#29992;&#25143;&#23450;&#20041;&#23383;&#38754;&#37327;&#27169;&#26495;&#30340;&#21517;&#23383;&#12290;</td>
</tr>
</table>
<p>&#25351;&#21517;&#31867;&#27169;&#26495;&#29305;&#21270;&#30340; <span class="t-spar">&#31616;&#21333;&#27169;&#26495;&#26631;&#35782;</span> &#25351;&#21517;&#19968;&#20010;&#31867;&#12290;</p>
<p>&#25351;&#21517;&#21035;&#21517;&#27169;&#29256;&#29305;&#21270;&#30340; <span class="t-spar">&#27169;&#26495;&#26631;&#35782;</span> &#25351;&#21517;&#19968;&#20010;&#31867;&#22411;&#12290;</p>
<p>&#25351;&#21517;&#20989;&#25968;&#27169;&#26495;&#29305;&#21270;&#30340; <span class="t-spar">&#27169;&#26495;&#26631;&#35782;</span> &#25351;&#21517;&#19968;&#20010;&#20989;&#25968;&#12290;</p>
<p><span class="t-spar">&#27169;&#26495;&#26631;&#35782;</span> &#21482;&#26377;&#22312;&#31526;&#21512;&#19979;&#21015;&#26465;&#20214;&#26102;&#25165;&#21512;&#27861;&#65306;</p>
<ul>
<li>&#23454;&#21442;&#25968;&#37327;&#19981;&#22810;&#20110;&#24418;&#21442;&#65292;&#25110;&#26377;&#19968;&#20010;&#24418;&#21442;&#26159;&#27169;&#26495;&#24418;&#21442;&#21253;&#65292;</li>
<li>&#27599;&#20010;&#27809;&#26377;&#40664;&#35748;&#27169;&#26495;&#23454;&#21442;&#30340;&#19981;&#21487;&#25512;&#23548;&#30340;&#38750;&#21253;&#24418;&#21442;&#37117;&#26377;&#19968;&#20010;&#23454;&#21442;&#65292;</li>
<li>&#27599;&#20010;&#27169;&#26495;&#23454;&#21442;&#37117;&#19982;&#23545;&#24212;&#30340;&#27169;&#26495;&#24418;&#21442;&#30456;&#21305;&#37197;&#65292;</li>
<li>&#26367;&#25442;&#27599;&#20010;&#27169;&#26495;&#23454;&#21442;&#21040;&#20854;&#21518;&#32493;&#27169;&#26495;&#24418;&#21442;&#65288;&#22914;&#26524;&#23384;&#22312;&#65289;&#20013;&#22343;&#25104;&#21151;&#65292;&#32780;&#19988;</li>
</ul>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx20">
<td>
<ul>
<li>&#22914;&#26524; <span class="t-spar">&#27169;&#26495;&#26631;&#35782;</span> &#38750;&#24453;&#20915;&#65292;&#37027;&#20040;&#23427;&#20851;&#32852;&#24471;&#32422;&#26463;&#38656;&#35201;&#25353;&#19979;&#36848;&#35201;&#27714;&#24471;&#20197;&#28385;&#36275;&#12290;</li>
</ul>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
</table>
<p>&#26080;&#25928;&#30340; <span class="t-spar">&#31616;&#21333;&#27169;&#26495;&#26631;&#35782;</span> &#26159;&#32534;&#35793;&#26102;&#38169;&#35823;&#65292;&#38500;&#38750;&#23427;&#25351;&#21517;&#30340;&#26159;&#20989;&#25968;&#27169;&#26495;&#29305;&#21270;&#65288;&#27492;&#26102;&#36866;&#29992; <a href="cpp-language-sfinae.html">SFINAE</a>&#65289;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, T<span class="sy4">::</span><span class="me2">type</span> n <span class="sy1">=</span> <span class="nu0">0</span><span class="sy1">&gt;</span>
<span class="kw1">class</span> X<span class="sy4">;</span>
<span class="kw1">struct</span> S
<span class="br0">{</span>
<span class="kw1">using</span> type <span class="sy1">=</span> <span class="kw4">int</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">using</span> T1 <span class="sy1">=</span> X<span class="sy1">&lt;</span>S, <span class="kw4">int</span>, <span class="kw4">int</span><span class="sy1">&gt;</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#23454;&#21442;&#36807;&#22810;</span>
<span class="kw1">using</span> T2 <span class="sy1">=</span> X<span class="sy1">&lt;&gt;</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#31532;&#19968;&#20010;&#27169;&#26495;&#24418;&#21442;&#27809;&#26377;&#40664;&#35748;&#23454;&#21442;</span>
<span class="kw1">using</span> T3 <span class="sy1">=</span> X<span class="sy1">&lt;</span><span class="nu0">1</span><span class="sy1">&gt;</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#20540; 1 &#19981;&#21305;&#37197;&#31867;&#22411;&#24418;&#21442;</span>
<span class="kw1">using</span> T4 <span class="sy1">=</span> X<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#31532;&#20108;&#20010;&#27169;&#26495;&#24418;&#21442;&#26367;&#25442;&#22833;&#36133;</span>
<span class="kw1">using</span> T5 <span class="sy1">=</span> X<span class="sy1">&lt;</span>S<span class="sy1">&gt;</span><span class="sy4">;</span> <span class="co1">// OK</span></pre></div>
</div>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx20">
<td>
<p>&#22914;&#26524;&#22312; <span class="t-spar">&#31616;&#21333;&#27169;&#26495;&#26631;&#35782;</span> &#30340;&#27169;&#26495;&#21517;&#25351;&#21517;&#21463;&#32422;&#26463;&#30340;&#38750;&#20989;&#25968;&#27169;&#26495;&#25110;&#21463;&#32422;&#26463;&#30340;&#27169;&#26495;&#27169;&#26495;&#24418;&#21442;&#65292;&#20294;&#19981;&#26159;&#20316;&#20026;&#26410;&#30693;&#29305;&#21270;&#30340;&#25104;&#21592;&#30340;&#25104;&#21592;&#27169;&#26495;&#65292;&#32780;&#19988; <span class="t-spar">&#31616;&#21333;&#27169;&#26495;&#26631;&#35782;</span> &#20013;&#30340;&#25152;&#26377;&#27169;&#26495;&#23454;&#21442;&#22343;&#38750;&#24453;&#20915;&#65292;&#37027;&#20040;&#24517;&#39035;&#28385;&#36275;&#21463;&#32422;&#26463;&#27169;&#26495;&#30340;&#21508;&#39033;&#20851;&#32852;&#32422;&#26463;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy1">&gt;</span>
concept C1 <span class="sy1">=</span> sizeof<span class="br0">(</span>T<span class="br0">)</span> <span class="sy3">!</span><span class="sy1">=</span> sizeof<span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>C1 T<span class="sy1">&gt;</span> <span class="kw1">struct</span> S1 <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>C1 T<span class="sy1">&gt;</span> <span class="kw1">using</span> Ptr <span class="sy1">=</span> T<span class="sy2">*</span><span class="sy4">;</span>
S1<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span><span class="sy2">*</span> p<span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#19981;&#28385;&#36275;&#32422;&#26463;</span>
Ptr<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> p<span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#19981;&#28385;&#36275;&#32422;&#26463;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy1">&gt;</span>
<span class="kw1">struct</span> S2 <span class="br0">{</span> Ptr<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> x<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65292;&#19981;&#35201;&#27714;&#35786;&#26029;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy1">&gt;</span>
<span class="kw1">struct</span> S3 <span class="br0">{</span> Ptr<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span> x<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#19981;&#35201;&#27714;&#28385;&#36275;</span>
S3<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> x<span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#19981;&#28385;&#36275;&#32422;&#26463;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">template</span><span class="sy1">&lt;</span>C1 T<span class="sy1">&gt;</span> <span class="kw1">class</span> X<span class="sy1">&gt;</span>
<span class="kw1">struct</span> S4
<span class="br0">{</span>
X<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> x<span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65292;&#19981;&#35201;&#27714;&#35786;&#26029;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy1">&gt;</span>
concept C2 <span class="sy1">=</span> sizeof<span class="br0">(</span>T<span class="br0">)</span> <span class="sy1">==</span> <span class="nu0">1</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>C2 T<span class="sy1">&gt;</span>
<span class="kw1">struct</span> S <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span> <span class="kw1">struct</span> S<span class="sy1">&lt;</span><span class="kw4">char</span><span class="br0">[</span><span class="nu0">2</span><span class="br0">]</span><span class="sy1">&gt;</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#19981;&#28385;&#36275;&#32422;&#26463;</span>
<span class="kw1">template</span><span class="sy1">&lt;&gt;</span> <span class="kw1">struct</span> S<span class="sy1">&lt;</span><span class="kw4">char</span><span class="br0">[</span><span class="nu0">2</span><span class="br0">]</span><span class="sy1">&gt;</span> <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;&#19981;&#28385;&#36275;&#32422;&#26463;</span></pre></div>
</div>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
</table>
<p>&#20004;&#20010; <span class="t-spar">&#27169;&#26495;&#26631;&#35782;</span> &#22312;&#28385;&#36275;&#19979;&#21015;&#26465;&#20214;&#26102;&#30456;&#21516;&#65306;</p>
<ul>
<li>&#23427;&#20204;&#30340; <span class="t-spar">&#27169;&#26495;&#21517;</span> &#25351;&#20195;&#21516;&#19968;&#27169;&#26495;&#65292;&#19988;</li>
<li>&#23427;&#20204;&#23545;&#24212;&#30340;&#31867;&#22411;&#27169;&#26495;&#23454;&#21442;&#26159;&#21516;&#19968;&#31867;&#22411;&#65292;&#19988;</li>
<li>&#23427;&#20204;&#23545;&#24212;&#30340;&#38750;&#31867;&#22411;&#27169;&#26495;&#23454;&#21442;&#22312;&#36716;&#25442;&#21040;&#27169;&#26495;&#24418;&#21442;&#30340;&#31867;&#22411;&#21518;<a href="cpp-language-template_parameters.html#.E6.A8.A1.E6.9D.BF.E5.AE.9E.E5.8F.82.E7.AD.89.E4.BB.B7.E6.80.A7">&#27169;&#26495;&#23454;&#21442;&#31561;&#20215;</a>&#65292;&#19988;</li>
<li>&#23427;&#20204;&#23545;&#24212;&#30340;&#27169;&#26495;&#27169;&#26495;&#23454;&#21442;&#25351;&#20195;&#21516;&#19968;&#27169;&#26495;&#12290;</li>
</ul>
<p>&#30456;&#21516;&#30340;&#20004;&#20010; <span class="t-spar">&#27169;&#26495;&#26631;&#35782;</span> &#25351;&#20195;&#21516;&#19968;&#20010;<span class="t-rev-inl t-since-cxx14"><span>&#21464;&#37327;&#12289;</span> <span><span class="t-mark-rev t-since-cxx14">(C++14 &#36215;)</span></span></span>&#31867;&#25110;&#20989;&#25968;&#12290;</p>
<h3><span class="mw-headline" id=".E6.A8.A1.E6.9D.BF.E5.8C.96.E5.AE.9E.E4.BD.93">&#27169;&#26495;&#21270;&#23454;&#20307;</span></h3>
<p>&#27169;&#26495;&#21270;&#23454;&#20307;&#65288;&#26576;&#20123;&#36164;&#26009;&#31216;&#20043;&#20026; &quot;temploid&quot;&#65289;&#26159;&#22312;&#27169;&#26495;&#23450;&#20041;&#20869;&#23450;&#20041;&#65288;&#25110;&#23545;&#20110; <span class="t-spar">lambda-&#34920;&#36798;&#24335;</span> &#20026;&#21019;&#24314;&#65289;&#30340;&#23454;&#20307;&#12290;&#19979;&#21015;&#25152;&#26377;&#23454;&#20307;&#37117;&#26159;&#27169;&#26495;&#21270;&#23454;&#20307;&#65306;</p>
<ul>
<li>&#31867;/&#20989;&#25968;<span class="t-rev-inl t-since-cxx14"><span>/&#21464;&#37327;</span> <span><span class="t-mark-rev t-since-cxx14">(C++14 &#36215;)</span></span></span>&#27169;&#26495;</li>
</ul>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx20">
<td>
<ul>
<li><a href="cpp-language-constraints.html">&#27010;&#24565;</a></li>
</ul>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
</table>
<ul>
<li>&#27169;&#26495;&#21270;&#23454;&#20307;&#30340;&#25104;&#21592;&#65288;&#20363;&#22914;&#31867;&#27169;&#26495;&#30340;&#38750;&#27169;&#26495;&#25104;&#21592;&#20989;&#25968;&#65289;</li>
<li>&#20316;&#20026;&#27169;&#26495;&#21270;&#23454;&#20307;&#30340;&#26522;&#20030;&#30340;&#26522;&#20030;&#39033;</li>
<li>&#20219;&#20309;&#27169;&#26495;&#21270;&#23454;&#20307;&#20013;&#23450;&#20041;&#25110;&#21019;&#24314;&#30340;&#23454;&#20307;&#65306;&#23616;&#37096;&#31867;&#65292;&#23616;&#37096;&#21464;&#37327;&#65292;&#21451;&#20803;&#20989;&#25968;&#65292;&#31561;&#31561;</li>
<li>&#27169;&#26495;&#21270;&#23454;&#20307;&#30340;&#22768;&#26126;&#20013;&#20986;&#29616;&#30340; lambda &#34920;&#36798;&#24335;&#30340;&#38381;&#21253;&#31867;&#22411;</li>
</ul>
<p>&#20363;&#22914;&#65292;&#22312;&#20197;&#19979;&#27169;&#26495;&#20013;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy1">&gt;</span>
<span class="kw1">struct</span> A
<span class="br0">{</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
<p>&#20989;&#25968; <code>A::f</code> &#19981;&#26159;&#20989;&#25968;&#27169;&#26495;&#65292;&#20294;&#23427;&#20173;&#28982;&#20250;&#34987;&#24403;&#20570;&#26159;&#27169;&#26495;&#21270;&#30340;&#12290;</p>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>