Home  >  Article  >  Backend Development  >  How does the ellipsis syntax work with variadic template parameter packs in C 11?

How does the ellipsis syntax work with variadic template parameter packs in C 11?

Susan Sarandon
Susan SarandonOriginal
2024-10-30 10:52:03793browse

How does the ellipsis syntax work with variadic template parameter packs in C  11?

Variadic Template Ellipsis Syntax

Variadic templates in C 11 allow for a variable number of template arguments. The syntax for the ellipsis (...) token in this context follows strict rules:

Unpacking/Packing:
The position of the ellipsis determines its purpose:

  • Right side (pattern): Unpacks a template parameter pack.
  • Left side (name): Creates a packed argument.

Expansion:
The pattern on the left side of ... is repeated, with comma-separated expressions replacing each unpacked pattern.

Application:
In the provided code:

<code class="cpp">return unique_ptr<T>(new T(std::forward<Args>(args)...));</code>
  • std::forward: Is a non-variadic template function taking a single template parameter and argument.
  • Unpacking: std::forward(args)... expands to std::forward(arg0), std::forward(arg1), ..., where arg0, arg1, ... are the individual arguments.

Reason for Ellipsis Placement:
In the template argument list and parameter list, the ellipsis is placed in the middle to achieve different expansions.

  • Template argument list: The ellipsis allows for a variable number of arguments.
  • Parameter list: The ellipsis ensures that the arguments are passed as a single packed argument.

Additional Notes:

  • The pattern can include access specifiers (e.g., public).
  • The ellipsis can be used to initialize arrays, e.g., {args, sizeof(T)}....
  • The syntax is the same regardless of whether the template is a class or a function.

The above is the detailed content of How does the ellipsis syntax work with variadic template parameter packs in C 11?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn