{"id":5562,"date":"2021-09-15T16:55:58","date_gmt":"2021-09-15T08:55:58","guid":{"rendered":"https:\/\/damogame.cn:15443\/wordpress\/?p=5562"},"modified":"2021-09-15T16:55:58","modified_gmt":"2021-09-15T08:55:58","slug":"c17%e4%bd%bf%e7%94%a8stdapply%e5%92%8cfold-expression%e5%af%b9stdtuple%e8%bf%9b%e8%a1%8c%e9%81%8d%e5%8e%86","status":"publish","type":"post","link":"https:\/\/i007.cc\/wordpress\/archives\/5562","title":{"rendered":"C++17\u4f7f\u7528std::apply\u548cfold expression\u5bf9std::tuple\u8fdb\u884c\u904d\u5386"},"content":{"rendered":"<article class=\"baidu_pl\">\n<div id=\"article_content\" class=\"article_content clearfix\">\n<div id=\"content_views\" class=\"markdown_views prism-atom-one-light\"><a href=\"https:\/\/blog.csdn.net\/theonegis\/article\/details\/82966314\">\u539f\u6587\u5730\u5740<\/a>&nbsp;<\/p>\n<p>\u5148\u6765\u770b\u8fd9\u4e2a<code>std::apply<\/code>\u51fd\u6570\uff0c\u8fd9\u4e2a\u51fd\u6570\u5b9a\u4e49\u5728<code>tuple<\/code>\u5934\u6587\u4ef6\u4e2d\uff0c\u51fd\u6570\u7b7e\u540d\u5982\u4e0b\uff1a<\/p>\n<pre class=\"language-c prettyprint\"><code class=\"prism ++ language-c has-numbering\">template <span class=\"token operator\">&lt;<\/span>class F<span class=\"token punctuation\">,<\/span> class Tuple<span class=\"token operator\">&gt;<\/span>\r\nconstexpr <span class=\"token function\">decltype<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">auto<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token function\">apply<\/span><span class=\"token punctuation\">(<\/span>F<span class=\"token operator\">&amp;&amp;<\/span> f<span class=\"token punctuation\">,<\/span> Tuple<span class=\"token operator\">&amp;&amp;<\/span> t<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<pre class=\"language-c prettyprint\"><code class=\"prism ++ language-c has-numbering\"><\/code><\/pre>\n<p>\u8be5\u51fd\u6570\u63a5\u53d7\u4e24\u4e2a\u53c2\u6570\uff0c\u7b2c\u4e00\u4e2a\u662f\u4e00\u4e2a\u51fd\u6570\u5bf9\u8c61\uff0c\u7b2c\u4e8c\u4e2a\u662f\u4e00\u4e2aTuple\u5bf9\u8c61<\/p>\n<p>\u6765\u770b\u4e00\u4e2a\u6700\u7b80\u5355\u7684\u793a\u4f8b\uff1a<\/p>\n<pre class=\"language-c prettyprint\"><code class=\"prism ++ language-c has-numbering\"><span class=\"token macro property\">#<span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;tuple&gt;<\/span><\/span>\r\n<span class=\"token macro property\">#<span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iostream&gt;<\/span><\/span>\r\n\r\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<!-- --><\/span>\r\n    <span class=\"token comment\">\/\/ \u4e24\u4e2a\u5143\u7d20\u76f8\u52a0<\/span>\r\n    std<span class=\"token punctuation\">:<\/span><span class=\"token punctuation\">:<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token punctuation\">:<\/span><span class=\"token punctuation\">:<\/span><span class=\"token function\">apply<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">auto<\/span> x<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">auto<\/span> y<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<!-- --><\/span> <span class=\"token keyword\">return<\/span> x <span class=\"token operator\">+<\/span> y<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> \r\n                            std<span class=\"token punctuation\">:<\/span><span class=\"token punctuation\">:<\/span><span class=\"token function\">make_tuple<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">2.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">'\\n'<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<pre class=\"language-c prettyprint\"><code class=\"prism ++ language-c has-numbering\"><\/code><\/pre>\n<p>\u8f93\u51fa\u7ed3\u679c\u662f3<\/p>\n<p>\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\u7b2c\u4e00\u4e2a\u53c2\u6570\u4f7f\u7528Lambda\u533f\u540d\u51fd\u6570\u5c06<code>tuple<\/code>\u4e2d\u7684\u4e24\u4e2a\u5143\u7d20\u76f8\u52a0\uff0c\u7b2c\u4e8c\u4e2a\u4f7f\u7528<code>std::make_tuple<\/code>\u51fd\u6570\u6784\u9020\u4e00\u4e2a\u53ea\u542b\u6709\u4e24\u4e2a\u5143\u7d20\u7684<code>tuple<\/code><\/p>\n<h2><a name=\"t2\"><\/a><a id=\"fold_expression_31\"><\/a>fold expression<\/h2>\n<p>\u8fd9\u4e2a\u7279\u6027\u662fC++ 17\u4e2d\u6211\u89c9\u5f97\u5f88\u6709\u7528\u7684\u4e00\u4e2a\u65b0\u7279\u6027\uff0c\u4f7f\u7528\u89c4\u5219\u6709\u4e0b\u9762\u56db\u6761\uff1a<\/p>\n<ol>\n<li>Unary right fold (<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E E <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">E<\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> \u2026) becomes (<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E 1 E_1 <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord\"><span class=\"mord mathit\">E<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">1<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> (\u2026 <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> (<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E N \u2212 1 E_{N-1} <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord\"><span class=\"mord mathit\">E<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathit mtight\">N<\/span><span class=\"mbin mtight\">\u2212<\/span>1<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E N E_N <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord\"><span class=\"mord mathit\">E<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathit mtight\">N<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>)))<\/li>\n<li>Unary left fold (\u2026 <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E E <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">E<\/span><\/span><\/span><\/span><\/span>) becomes (((<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E 1 E_1 <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord\"><span class=\"mord mathit\">E<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">1<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E 2 E_2 <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord\"><span class=\"mord mathit\">E<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>) <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> \u2026) <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E N E_N <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord\"><span class=\"mord mathit\">E<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathit mtight\">N<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>)<\/li>\n<li>Binary right fold (<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E E <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">E<\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> \u2026 <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> I I <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">I<\/span><\/span><\/span><\/span><\/span>) becomes (<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E 1 E_1 <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord\"><span class=\"mord mathit\">E<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">1<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> (\u2026 <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> (<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E N \u2212 1 E_{N\u22121} <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord\"><span class=\"mord mathit\">E<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathit mtight\">N<\/span>\u22121<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> (<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E N E_N <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord\"><span class=\"mord mathit\">E<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathit mtight\">N<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> I I <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">I<\/span><\/span><\/span><\/span><\/span>))))<\/li>\n<li>Binary left fold (<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> I I <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">I<\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> \u2026 <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E E <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">E<\/span><\/span><\/span><\/span><\/span>) becomes ((((<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> I I <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">I<\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E 1 E_1 <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord\"><span class=\"mord mathit\">E<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">1<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>) <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E 2 E_2 <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord\"><span class=\"mord mathit\">E<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>) <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> \u2026) <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span> <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E N E_N <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord\"><span class=\"mord mathit\">E<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathit mtight\">N<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>)<\/li>\n<\/ol>\n<p>\u8fd9\u91cc\u7684<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E E <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">E<\/span><\/span><\/span><\/span><\/span>\u6307\u7684\u662fExpression\uff08\u7b26\u5408C++\u8bed\u6cd5\u7684\u8868\u8fbe\u5f0f\uff09\uff0c<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span>\u6307\u7684\u662foperator\uff08\u64cd\u4f5c\u7b26\uff09\uff0c<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> N N <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">N<\/span><\/span><\/span><\/span><\/span>\u662fparameter pack\uff08\u53ef\u53d8\u53c2\u6570\uff09\u7684\u4e2a\u6570\uff0c<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> I I <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">I<\/span><\/span><\/span><\/span><\/span>\u662f\u4e00\u4e2a\u5e38\u6570\u3002<\/p>\n<p>\u53ef\u80fd\u770b\u8fd9\u4e2a\u89c4\u5219\u6709\u4e9b\u62bd\u8c61\uff0c\u6211\u4eec\u6765\u770b\u4e00\u4e9b\u5177\u4f53\u7684\u4f8b\u5b50\uff1a<\/p>\n<pre class=\"language-c prettyprint\"><code class=\"prism +++ language-c has-numbering\"><span class=\"token macro property\">#<span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;tuple&gt;<\/span><\/span>\r\n<span class=\"token macro property\">#<span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iostream&gt;<\/span><\/span>\r\n\r\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<!-- --><\/span>\r\n    <span class=\"token comment\">\/\/ \u591a\u4e2a\u5143\u7d20\u76f8\u52a0\uff0c\u4f7f\u7528parameter pack<\/span>\r\n    std<span class=\"token punctuation\">:<\/span><span class=\"token punctuation\">:<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token punctuation\">:<\/span><span class=\"token punctuation\">:<\/span><span class=\"token function\">apply<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">auto<\/span><span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<!-- --><\/span> <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span>args <span class=\"token operator\">+<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\r\n                            std<span class=\"token punctuation\">:<\/span><span class=\"token punctuation\">:<\/span><span class=\"token function\">make_tuple<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">2.f<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">'\\n'<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token comment\">\/\/ \u904d\u5386tuple\u5e76\u8f93\u51fa\uff0c\u6ce8\u610f\u9017\u53f7\u64cd\u4f5c\u7b26\u7684\u4f7f\u7528<\/span>\r\n    std<span class=\"token punctuation\">:<\/span><span class=\"token punctuation\">:<\/span><span class=\"token function\">apply<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">auto<\/span><span class=\"token operator\">&amp;&amp;<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span> args<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<!-- --><\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>std<span class=\"token punctuation\">:<\/span><span class=\"token punctuation\">:<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> args <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">'\\n'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\r\n                std<span class=\"token punctuation\">:<\/span><span class=\"token punctuation\">:<\/span><span class=\"token function\">make_tuple<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">2.f<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<pre class=\"language-c prettyprint\"><code class=\"prism +++ language-c has-numbering\"><\/code><\/pre>\n<p>\u8f93\u51fa\u5982\u4e0b\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"has-numbering\">6\r\n1\r\n2\r\n3<\/code><\/pre>\n<pre class=\"prettyprint\"><code class=\"has-numbering\"><\/code><\/pre>\n<p>\u7b2c6\u884c\u4e2d\uff0c<code>std::apply<\/code>\u51fd\u6570\u7684\u7b2c\u4e00\u4e2a\u53c2\u6570\u662f\u4e00\u4e2aLambda\u533f\u540d\u51fd\u6570\uff0c\u51fd\u6570\u7684\u53c2\u6570\u662f\u4e00\u4e2a\u53ef\u53d8\u53c2\u6570<code>args<\/code>\uff0c\u51fd\u6570\u4f53\u4e2d\u53ea\u6709\u4e00\u6761\u8bed\u53e5<code>args + ...<\/code>\uff0c\u8fd9\u4e2a\u60c5\u51b5\u5c31\u662f\u4e0a\u9762\u7684\u7b2c\u4e00\u79cd\u60c5\u51b5\uff1a\u8fd9\u91cc\u7684<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E E <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">E<\/span><\/span><\/span><\/span><\/span>\u5c31\u662f<code>args<\/code>\uff0c<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span>\u5c31\u662f<code>+<\/code>\uff0c\u6240\u4ee5\u5c55\u5f00\u6765\u5c31\u662f<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> a r g s 1 + a r g s 2 + a r g s 3 args_1 + args_2 + args_3 <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">a<\/span><span class=\"mord mathit\">r<\/span><span class=\"mord mathit\">g<\/span><span class=\"mord\"><span class=\"mord mathit\">s<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">1<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><span class=\"mbin\">+<\/span><\/span><span class=\"base\"><span class=\"mord mathit\">a<\/span><span class=\"mord mathit\">r<\/span><span class=\"mord mathit\">g<\/span><span class=\"mord\"><span class=\"mord mathit\">s<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">2<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><span class=\"mbin\">+<\/span><\/span><span class=\"base\"><span class=\"mord mathit\">a<\/span><span class=\"mord mathit\">r<\/span><span class=\"mord mathit\">g<\/span><span class=\"mord\"><span class=\"mord mathit\">s<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\"><span class=\"\"><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">3<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\uff08\u56e0\u4e3a\u53c2\u6570\u7684\u4e2a\u6570\u662f3\uff09\u3002<\/p>\n<p>\u7b2c9\u884c\u4e2d\uff0cLambda\u533f\u540d\u51fd\u6570\u7684\u51fd\u6570\u4f53\u662f<code>((std::cout &lt;&lt; args &lt;&lt; '\\n'), ...)<\/code>\u8fd9\u662f\u4e00\u4e2a\u9017\u53f7\u64cd\u4f5c\u7b26\uff0c\u4e5f\u5c5e\u4e8e\u4e0a\u9762\u56db\u79cd\u60c5\u51b5\u4e2d\u7684\u7b2c\u4e00\u79cd\uff1a\u8fd9\u91cc\u7684<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> E E <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">E<\/span><\/span><\/span><\/span><\/span>\u5c31\u662f<code>std::cout &lt;&lt; args &lt;&lt; '\\n')<\/code>\uff0c<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> o p op <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"mord mathit\">o<\/span><span class=\"mord mathit\">p<\/span><\/span><\/span><\/span><\/span>\u5c31\u662f<code>,<\/code>\uff0c\u6240\u4ee5\u8fd9\u4e00\u884c\u5c31\u6253\u5370\u8f93\u51fa\u4e86<code>tuple<\/code>\u7684\u6bcf\u4e00\u4e2a\u5143\u7d20\u3002\u5982\u679c\u5728C++17\u4e4b\u524d\u60f3\u8981\u904d\u5386<code>tuple<\/code>\u5c31\u6bd4\u8f83\u9ebb\u70e6\uff0c\u9700\u8981\u5f88\u591a\u989d\u5916\u7684\u64cd\u4f5c\u3002<\/p>\n<h2><a name=\"t3\"><\/a><a id=\"_76\"><\/a>\u53c2\u8003\u8d44\u6599<\/h2>\n<ol>\n<li><a href=\"https:\/\/zh.cppreference.com\/w\/cpp\/utility\/apply\" target=\"_blank\" rel=\"noopener\">std::apply<\/a><\/li>\n<li><a href=\"https:\/\/en.cppreference.com\/w\/cpp\/language\/fold\" target=\"_blank\" rel=\"noopener\">fold expression<\/a><\/li>\n<\/ol>\n<\/div>\n<div>\n<div><\/div>\n<\/div>\n<\/div>\n<\/article>\n","protected":false},"excerpt":{"rendered":"<p>\u539f\u6587\u5730\u5740&nbsp; \u5148\u6765\u770b\u8fd9\u4e2astd:<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[],"tags":[119],"class_list":["post-5562","post","type-post","status-publish","format-standard","hentry","tag-03-"],"_links":{"self":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/5562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/comments?post=5562"}],"version-history":[{"count":0,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/5562\/revisions"}],"wp:attachment":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/media?parent=5562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/categories?post=5562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/tags?post=5562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}