반응형
가변인자 템플릿
printf() 함수는 몇개의 매개 변수든 받을 수 있습니다. 템플릿 프로그램ㅇ에서도 똑같이 할 수 있습니다. 이것을 가변 인자 템플릿이라고 합니다.
다양한 매개변수 개수와 자료형을 지원하는 클래스 또는 함수 템플릿을 의미합니다. 매개 변수 목록에서 생략 부호(...)를 씁니다.
가변 인자 템플릿 클래스
template<typename ... Arguments>
<반환형> <함수명>(Arguments... args)
{
}
std::make_unique()
가변 인자 템플릿을 사용하는 대표적인 클래스는 바로 make_unique() 함수입니다. 매개변수가 얼마나 많이 나오는 지에 대해 알 수 없기 때문에, 활용되다는 것을 알 수 있습니다.
또 추가적으로 share_ptr에서도 활용되고 있다는 것을 알 수 있습니다.
가변 인자 템플릿 활용
활용법을 생각하기가 정말로 어렵습니다. 주로 인자 전달용입니다. 몇몇 다른 아이디어들도 있지만, 실용적이기는 어렵습니다.
예제
#pragma once
#include <iostream>
using namespace std;
namespace samples
{
void VariadicTemplateFunctionExample();
template<typename T, typename... TArgs>
T* Create(TArgs... args)
{
cout << "Creating instance" << endl;
T* object = new T(args...);
return object;
}
}
#include "VariadicTemplateFunctionExample.h"
#include "Foo.h"
#include "Bar.h"
namespace samples
{
void VariadicTemplateFunctionExample()
{
Foo* foo1 = Create<Foo>(1.0f);
Foo* foo2 = Create<Foo>(1.0f, 2.0f);
// Compile error
// Foo* foo3 = Create<Foo>(1.0f, 2.0f, 3.0f);
Bar* bar1 = Create<Bar>();
Bar* bar2 = Create<Bar>(1, 2, 3);
// Compile error
// Bar* bar3 = Create<Bar>(1, 2);
delete foo1;
delete foo2;
delete bar1;
delete bar2;
}
}
좋은 예제가 아래 사이트에 공유되어 있습니다. 해당 방식으로 가변 인자 템플릿을 활용할 수 있습니다.
반응형
'SW > C++' 카테고리의 다른 글
C++ : 클래스 템플릿 : 예제, 사용법, 구현 방법, 추천 (0) | 2020.04.21 |
---|---|
C++ : 템플릿 프로그래밍 : 기본 개념, 예제, 활용방법, 주의사항 (0) | 2020.04.20 |
C++ : module : 모듈 시스템 개요, 사용 방법, 장단점 (0) | 2020.04.18 |
C++ : filesystem : 기본 예제, 사용법, 주의 사항 (0) | 2020.04.17 |
C++ : filesystem : 파일 복사, 디렉터리 이동, 바꾸기, 삭제, 목록, 권한 : 예제 (1) | 2020.04.16 |