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번 함수가 호출되서 재귀함수가 종료됩니다.

 

+ Recent posts