#include <iostream>
#include <tuple>
#include <string>
#include <type_traits>
template<std::size_t N>
struct print_hlp {
template<class... Args>
static void exec(std::tuple<Args...>& t)
{
print_hlp<N-1>::exec(t);
std::cout << " , ";
using type_t = std::tuple_element<N, std::tuple<Args...> >::type;
if (std::is_rvalue_reference<type_t>::value){
std::cout << "右值=";
}
else{
std::cout << "左值=";
}
std::cout << std::get<N>(t);
}
};
template<>
struct print_hlp<0> {
template<class... Args>
static void exec(std::tuple<Args...>& t)
{
using type_t = std::tuple_element<0, std::tuple<Args...> >::type;
if (std::is_rvalue_reference<type_t>::value){
std::cout << "右值=";
}
else{
std::cout << "左值=";
}
std::cout << std::get<0>(t);
return;
}
};
template<class... Args>
void print(std::tuple<Args...>& t)
{
std::cout << "(";
print_hlp<sizeof...(Args)-1>::exec(t);
std::cout << ")\n";
}
int main()
{
int a = 3;
auto t = std::forward_as_tuple(1, 2, a);
print(t);
return 0;
}
遍历std::tuple
最新推荐文章于 2024-08-30 20:14:06 发布