void PrintTuple(tuple<int, float, int, float> tupleA)
{
cout << get<0>(tupleA) << ";" << get<1>(tupleA) << ";" << get<2>(tupleA) << ";" << get<3>(tupleA) << ";\n";
}
// 由于std::get<size_t>(t)的语法中是size_t必须在编译的时候确定,所以无法传左值。
// 借助模板中的可变模板参数递归实现
template<class Tuple, size_t N>
struct PrintTuple
{
static void Printf(const Tuple& Value)
{
PrintTuple<Tuple, N - 1>::Printf(Value);
cout << "," << get<N - 1>(Value);
}
};
// 类模板的特化版本
template<class Tuple>
struct PrintTuple<Tuple, 1>
{
static void Printf(const Tuple& Value)
{
cout << get<0>(Value);
}
};
template<class... Args>
void PrintfMyTuple(const tuple<Args...>& vlaue)
{
PrintTuple<decltype(vlaue), sizeof...(Args)>::Printf(vlaue);
}
#pragma region c++ Tuple的用法(元组的用法)
//
tuple<int, float, int, float> tupleA = make_tuple(1, 2.f, 3, 4.f);
tuple<int, float, int, float> tupleB(1,2.f,3,4.f);
/** 获取值 [6/17/2020 ZC] */
PrintTuple(tupleA);
/** 修改值 [6/17/2020 ZC] */
get<0>(tupleA) = 5;
get<1>(tupleA) = 6.f;
get<2>(tupleA) = 7;
get<3>(tupleA) = 8.f;
PrintTuple(tupleA);
/** forward_as_tuple构造Tuple(元组),一个 元组具有右值引用的args对象,适合作为参数传递给函数。 [6/17/2020 ZC] */
{
错误用法//
auto tupleC = forward_as_tuple(0, 1.f, 2, 3.f);
get<0>(tupleC) = 2;
get<1>(tupleC) = 4.5f;
get<2>(tupleC) = 234;
get<3>(tupleC) = 22.f;
PrintTuple(tupleC);
//
int a = 0;
float b = 0.f;
int c = 0;
float d = 0.1f;
auto tupleD = forward_as_tuple(a, b, c, d);
get<0>(tupleD) = 2;
get<1>(tupleD) = 4.5f;
get<2>(tupleD) = 234;
get<3>(tupleD) = 22.f;
PrintTuple(tupleD);
cout << a << endl;
cout << b << endl;
cout << c << endl;
cout << d << endl;
}
tuple<int, float, int, float> a(2, 3, 1, 4);
/** 获取tuple的数量 [6/17/2020 ZC] */
int Num = tuple_size<decltype(a)>::value;
cout << "Num = " << Num << endl;
/** 获取tuple类型:1表示第2个参数的索引 [6/17/2020 ZC] */
tuple_element<1, decltype(a)>::type t = get<1>(a);
cout << "t = " << t << endl;
/** 拼接元组 [6/17/2020 ZC] */
tuple<int, int, int, int> b(2, 3, 1, 4);
tuple<int, int, int, int> c(2, 3, 1, 4);
//拼接
auto TT = tuple_cat(a, b, c);
/** 打印tuple全部的值 [6/17/2020 ZC] */
PrintfMyTuple(TT);
//
#pragma endregion
c++ Tuple的用法(元组的用法)
猜你喜欢
转载自blog.csdn.net/qq_21919621/article/details/106808280
今日推荐
周排行