https://younggwan.tistory.com/53
C++ 가변인자
정의 매개 변수의 개수가 변할수 있는 인자이다. 예를 들어, printf, scanf 가 가변인자를 사용한 함수이다. 코드로 가변 인자를 사용하면서 설명하겠습니다. 정수를 더하는 가변 인자 함수입니다. 코드 #include..
younggwan.tistory.com
위 글에서 가변 인자에 대해 설명할때는 인자를 int형으로만 받아서 설명을 했다.
그럼 인자의 형태가 여러가지 형태일때는 어떻게 해야할까???
가변 인자 템플릿을 사용하면된다!.
코드를 통해 설명!!
코드
#include <iostream>
void Y_FUNC()
{
}
template <typename T, typename ...Arg>
void Y_FUNC(T _Value, Arg... args)
{
int count = 0;
++count;
std::cout << count << ". " << typeid(T).name() << " : " << _Value << std::endl;
int tempsize = (int)sizeof...(args);
std::cout << "남은 변수 : "<< tempsize << std::endl;
Y_FUNC(args...);
}
int main()
{
short _s = 2;
float _f = 3.3f;
Y_FUNC(1, "YYG", 'C', _s, _f, 11111111111);
return 0;
}
결과
Y_FUNC()안에 넣어준 인자들이
출력되고 현재 변수의 개수가 출력되고 있는데.
sizeof...() 의 동작은 현재 남은 가변 인자의 개수를 알려줍니다
Y_FUNC()함수 내부를 보면 재귀함수 형태로 인자들을 전달해주는데 재귀의 탈출문이 보이지않습니다
지금 Y_FUNC()는 함수 오버로딩을 이용해 두가지가 있습니다.
1.
...Arg>template ...Arg>
Y_FUNC(Y_FUNC(T _Value, Arg... args)
2.
Y_FUNC()
인자를 받는 함수와 인자를 받지 않는 함수
재귀함수로 가변인자가 계속 값이 들어가면서 1번이 호출되다가 마지막에 더이상 인자가 없을때는
2번 함수가 호출되서 재귀함수가 종료됩니다.
'게임 프로그래밍 > C++ 기초' 카테고리의 다른 글
C++ void* 보이드 포인터 (0) | 2020.05.11 |
---|---|
C++ 함수 포인터 (0) | 2020.05.05 |
C++ 가변인자 (1) | 2020.05.03 |
C++ 가상함수테이블(Virtual function table) (3) | 2020.05.02 |
C++ 자료형의 type을 알아내는 방법 typeid() (0) | 2020.05.02 |