#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 |