c++ Tuple的用法(元组的用法)

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

猜你喜欢

转载自blog.csdn.net/qq_21919621/article/details/106808280