TIL/TIS 211210
가변 탬플릿
가변 탬플릿을 사용하면 임의의 개수의 인자를 받는 함수를 구현할수 있다. 이때 템플릿 파라미터팩이라는 개념을 이용한다.
template <typename T, typename... Types>
void func1(T arg, Types... args) {
...
}
탬플릿 파라미터 팩은 0개 이상의 인자들을 나타낸다. -> 위의 함수의 경우 1개의 [탬플릿]인자만 호출하는 경우에도 사용 가능
여러개의 문자열을 합치는 코드(예외처리에 대해서는 생각하지 않는다.)
#include <iostream>
// string클래스에 strCat이라는 맴버 함수를 override
// 임의의 자료형 s를 받아서 string으로 변환
template<typename Str>
std::string strCat(const Str& s) {
return new std::string(s);
}
// 탬플릿 인자 정의시 : typename...
template<typename Str, typename... Strs>
// 파라미터팩 선언시 : 탬플릿인자...
std::string strCat(const Str& s, Strs... ss) {
// 파라미터팩 사용 : 변수...
// strCat(ss...) : 팩 확장이라고 함. 재귀적으로 호출됨.
return std::string(s) + strCat(ss...);
}
int main() {
std::cout << strCat(std::string("4"), std::string("2"), std::string("gyeon")) << std::endl;
/*
* strCat("4", "2", "gyeon");
* -> return "4" + strCat("2", "gyeon");
* -> return "2" + strCat("gyeon");
* -> return "gyeon";
*/
}
파라미터팩의 개수 : sizeof...(파라미터팩) //이때 파라미터팩에는...생략
Fold형식
위까지는 C++ 11에 있는 개념이다.
위처럼 파라미터팩을 사용하기 위해서는 팩확장이라고 하는 재귀적인 코드를 사용해야하는데, 코드의 복잡성이 높아지게 된다. 이를 C++ 17에서는 재귀를 만들 필요 없이 더 간단하게 표현할수 있다.
(Fold방식)
형태로 사용.
사용법 및 예시
Author And Source
이 문제에 관하여(TIL/TIS 211210), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gyujun9403/TILTIS-211210저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)