본문 바로가기

C++

가변인자 템플릿

#include<iostream>
#include<string>

template <typename T>
void print(T arg) {
	// 마지막 가변인자를 받게 됨.
	std::cout << typeid(arg).name() << std::endl;
}

template <typename T, typename... Types>
void print(T arg, Types... args) {
	std::cout << typeid(arg).name() << std::endl;
	print(args...);
}

template<typename T>
void forward(T arg)
{
	; // empty
	// 가변인자 템플릿 사용 시, ... 을 받지 않는 동일한 이름의 함수가 필요함
}

template <typename T, typename... Types>
void forward(T arg, Types... args)
{
	std::cout << arg << std::endl;
	// arg를 제외한 가변인자의 길이 반환.  
	std::cout << sizeof...(Types) << std::endl;
	std::cout << sizeof...(args) << std::endl;

	// 가변인자를 넘길때는 ... 을 해주어야 함.
	print(arg, args...);
}


struct how
{
	std::string name;
	int age;
	double point;
};

int main()
{
	forward(&how::name, &how::age, &how::point, 1, 2, "abc", 1.4f, 15.);
	return 0;
}

출력

1
7
7
class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > how::*
int how::*
double how::*
int
int
char const *
float
double



'C++' 카테고리의 다른 글

STL priority_queue  (0) 2021.10.28
std::filesystem  (0) 2021.10.27
std::shared_ptr  (0) 2021.10.27
std::unique_ptr  (0) 2021.10.27
std::find()  (0) 2021.10.27