#include <iostream>
#include <string>
#include <type_traits>
#include <typeinfo>
template <typename ...Args>
struct Connect;
template <typename First, typename ...Rest>
struct Connect<First, Rest...> {
static std::string get_name() {
std::string str = typeid(First).name();
str += " ";
str += Connect<Rest...>::get_name();
return str;
}
};
template <typename Last>
struct Connect<Last> {
static std::string get_name() {
return typeid(Last).name();
}
};
struct Test {
int aa;
};
int main() {
auto str = Connect<int, double, float, std::string, Test>::get_name();
std::cout << str << std::endl;
return 0;
}
#include <iostream>
#include <string>
#include <type_traits>
#include <typeinfo>
template <typename T>
std::string get_name() {
return typeid(T).name();
}
template <typename ...Rest>
std::string get_types_name() {
std::string str;
int arr[] = {(str += " " + get_name<Rest>(), 0)...};
std::cout << sizeof(arr) << std::endl;
return str;
}
int main() {
std::cout << get_types_name<int, float, double, int, std::string>() << std::endl;
return 0;
}