(window.webpackJsonp=window.webpackJsonp||[]).push([[688],{1096:function(a,t,s){"use strict";s.r(t);var e=s(31),n=Object(e.a)({},(function(){var a=this,t=a.$createElement,s=a._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"parameter-packs"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#parameter-packs"}},[a._v("#")]),a._v(" Parameter packs")]),a._v(" "),s("h2",{attrs:{id:"a-template-with-a-parameter-pack"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#a-template-with-a-parameter-pack"}},[a._v("#")]),a._v(" A template with a parameter pack")]),a._v(" "),s("div",{staticClass:"language-cpp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-cpp"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("template")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v(" Types"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("struct")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("Tuple")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n")])])]),s("p",[a._v("A parameter pack is a template parameter accepting zero or more template arguments. If a template has at least one parameter pack is a "),s("strong",[a._v("variadic template")]),a._v(".")]),a._v(" "),s("h2",{attrs:{id:"expansion-of-a-parameter-pack"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#expansion-of-a-parameter-pack"}},[a._v("#")]),a._v(" Expansion of a parameter pack")]),a._v(" "),s("p",[a._v("The pattern "),s("code",[a._v("parameter_pack ...")]),a._v(" is expanded into a list of comma-separated substitutions of "),s("code",[a._v("parameter_pack")]),a._v(" with each one of its parameters")]),a._v(" "),s("div",{staticClass:"language-cpp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-cpp"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("template")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("T")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// Base of recursion")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("void")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("variadic_printer")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("T last_argument"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n std"),s("span",{pre:!0,attrs:{class:"token double-colon punctuation"}},[a._v("::")]),a._v("cout "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<<")]),a._v(" last_argument"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("template")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("T")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("Args"),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" \n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("void")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("variadic_printer")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("T first_argument"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" Args"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v(" other_arguments"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n std"),s("span",{pre:!0,attrs:{class:"token double-colon punctuation"}},[a._v("::")]),a._v("cout "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<<")]),a._v(" first_argument "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<<")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v('"\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[a._v("variadic_printer")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("other_arguments"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// Parameter pack expansion")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n")])])]),s("p",[a._v("The code above invoked with "),s("code",[a._v('variadic_printer(1, 2, 3, "hello");')]),a._v(" prints")]),a._v(" "),s("div",{staticClass:"language-cpp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-cpp"}},[s("code",[s("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("2")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[a._v("3")]),a._v("\nhello\n\n")])])])])}),[],!1,null,null,null);t.default=n.exports}}]);