>백엔드 개발 >C++ >C 11 가변 템플릿에서 줄임표(...) 토큰은 어떻게 작동합니까?

C 11 가변 템플릿에서 줄임표(...) 토큰은 어떻게 작동합니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-30 01:03:28782검색

How does the ellipsis (...) token work in C  11 variadic templates?

가변 템플릿과 줄임표("...") 토큰

C 11에서 가변 템플릿은 유연한 수의 템플릿을 허용합니다. 매개변수. 가변 템플릿을 정의할 때 줄임표(...) 토큰은 중요한 역할을 합니다.

Unpacking vs. Packing

줄임표의 위치에 따라 기능이 결정됩니다.

  • Unpacking(오른쪽): 표현식의 오른쪽에 사용될 경우 ... 템플릿 매개변수 팩을 언팩합니다. 쉼표로 구분된 압축 해제된 패턴은 실제 함수 호출에서 줄임표를 대체합니다.
  • 패킹(왼쪽): 왼쪽에 배치하면 ... 인수를 다음으로 압축합니다. 템플릿 매개변수 팩. 압축된 인수는 함수 내에서 단일 엔터티로 사용할 수 있습니다.

압축 풀기의 예

다음 가변 템플릿 함수를 고려하세요.

<code class="cpp">template< class T, class... Args >
unique_ptr<T> make_unique( Args&amp;&amp;... args )
{
    return unique_ptr<T>(new T(std::forward<Args>(args)...));
}</code>

여러 인수로 make_unique를 호출할 때 줄임표(std::forward(Args>(args)...)를 사용하면 함수가 가변 개수의 인수를 허용할 수 있습니다. 줄임표는 Args 매개변수 팩을 압축 해제하여 다음 확장 표현식:

<code class="cpp">std::forward<Arg0>(arg0), std::forward<Arg1>(arg1), ...</code>

템플릿 및 함수 인수의 줄임표 배치

템플릿 인수 목록에서 줄임표는 매개변수를 나타 내기 위해 중간에 배치됩니다. pack은 함수 매개변수 목록에서 계속됩니다. 이는 가변 매개변수 팩 뒤에 추가 템플릿 매개변수(예: 비가변 매개변수)가 있을 수 있기 때문입니다.

함수 구현에서 줄임표는 끝에 배치됩니다. 압축이 풀린 인수의 끝을 표시하는 표현식입니다. 이는 단일 엔터티로 압축되지 않고 나머지 인수가 전달되도록 보장합니다.

추가 애플리케이션

줄임표 다음과 같은 다른 상황에서도 사용할 수 있습니다:

  • 가변 이니셜라이저로 배열 생성
  • 여러 기본 클래스에서 상속되는 클래스 정의(공용 Mixins... 구문을 통해)

위 내용은 C 11 가변 템플릿에서 줄임표(...) 토큰은 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.