C++ 元组
C++ std::tuple 与 python tuple 类似,可以存放不同类型的数据。
常用操作
// 模板 定义 tuple
std::tuple<int,int,std::string> t(1,2,"hello");
//tuple 大小
int size = std::tuple_size<decltype(t)>::value;
//访问
int a = std::get<0>(t);
int b = std::get<1>(t);
std::string s = std::get<2>(t);
完整例子
#include <iostream>
#include <tuple>
#include <functional>
#include <type_traits>
namespace test{
int add(int a,int b)
{
return a+b;
}
};
int test_traits()
{
const int n = 10;
int a = 10;
int b = 20;
double d = 0.209;
std::cout << "\033[31;1mTest c++ 11 type_traits \e[0m\n";
// std::is_same
std::cout << "std::is_same " << std::is_same<decltype(a),decltype(b)>::value << "\n";
std::cout << "std::is_same " << std::is_same<decltype(a),decltype(d)>::value << "\n";
std::cout << "std::is_const " << std::is_const<decltype(n)>::value << "\n";
typedef std::conditional<true,int,char>::type a1;
typedef std::conditional<false,int,char>::type b1;
std::cout << "std::is_same " << std::is_same<int,a1>::value << "\n";
std::cout << "std::is_same " << std::is_same<int,b1>::value << "\n";
std::cout << "std::is_same " << std::is_same<char,a1>::value << "\n";
std::cout << "std::is_same " << std::is_same<char,b1>::value << "\n";
// std::result_of
std::function<int(int,int)> fn = test::add;
std::cout << "func(1,2) " << fn(1,2) << std::endl;
/*using 和 typedef 是一样 */
// using func = int(*)(int,int);
typedef int(*func)(int,int);
std::cout << "std::result_of : " << std::is_same<int,std::result_of<func(int,int)>::type>::value << "\n";
return 0;
}
int main()
{
std::tuple<int,char,std::string> param(10,'1',"hello");
//for(int i = 0; i < std::tuple_size<decltype(param)>::value; i ++){
// std::cout << "tuple " << i << " value :" << std::get<i>(param) << std::endl;
//}
std::cout << "\033[33;1mTest c++ 11 std::tuple \033[0m \n";
std::cout << "tuple size : " << std::tuple_size<decltype(param)>::value << "\n";
std::cout << "tuple value: " << std::get<0>(param) << "\n";
std::cout << "tuple vaule: " << std::get<1>(param) << "\n";
std::cout << "tuple value: " << std::get<2>(param) << "\n";
// std::tuple_element
std::tuple_element<1,decltype(param)>::type t;
t = std::get<1>(param);
std::cout << "t value : " << t << "\n";
test_traits();
return 0;
}