티스토리 뷰

 가변 템플릿 인자는 템플릿 함수나 클래스가 임의의 수와 타입의 인자를 받을 수 있도록 한다. 여기서 `Args`는 가변 인자의 타입들을 나타내는 플레이스홀더 이름이며, 다른 이름으로 대체될 수 있다.

 

가변 템플릿 인자를 사용하는 방법은 다음과 같다:

template<typename ... Args>
void myFunction(Args ... args) {
    // args를 사용하는 코드
}

 

이 함수는 어떤 수와 타입의 인자든 받을 수 있다. 예를 들어, `myFunction(1, 2.5, "Hello")`와 같이 호출할 수 있다.

 

template<typename ... Args>
class MyClass {
public:
    MyClass(Args ... args) {
        // args를 사용하는 생성자의 로직
    }
};

 

이 클래스도 여러 타입과 수의 인자를 받을 수 있는 생성자를 가지고 있다.

가변 템플릿 인자는 주로 템플릿 메타프로그래밍, 범용 라이브러리 개발, 함수 포워딩 등 다양한 상황에서 유용하게 사용된다. `std::tuple`, `std::function` 등의 표준 라이브러리 클래스들도 가변 템플릿 인자를 활용한다.

또한, C++11 이상에서는 가변 인자 템플릿을 활용하여 재귀적 템플릿 패턴을 구현할 수 있으며, 이를 통해 각 인자에 대해 연산을 수행하는 등의 고급 기능을 구현할 수 있다.

 

범용 참조와 함께 쓰일 수 있다.

 

범용 참조: 
https://til-choonham.tistory.com/471

 

[C++] 문법: 범용 참조 (Args&&... args)

범용 참조는 주로 템플릿 함수에서 lvalue와 rvalue 참조를 모두 처리할 수 있는 유연성을 제공하기 위해 사용된다. 여기서 `Args&&`는 다음과 같은 특징을 가진다: 1. 타입 추론: `Args&&`는 컴파일러가

til-choonham.tistory.com

 

Comments