其它的一些高级主题


Tuples

tuple是C++11新引入的feature,类似pair模板,tuple中的每个元素都可以有不同的类型,和pair不同的是,tuple可以有任意多个成员。我们可以使用两种方式来构造tuple对象

//default init method, each member is set to default value
tuple<size_t, size_t, size_t> threeD;  //all members are set to 0
tuple<string, vector<double>, int, list<int>> items = {
    "constants",
    {3.14, 2.718},
    42,
    {0,1,2,3,4,5}
};
//use make_tuple
auto item = make_tuple("0-999-78345-X",3,20.00);

访问tuple对象有些奇怪,我们不能用tuple.get,而是需要用标准库函数std::get来访问。std::get是一个函数模板,我需要指定tuple成员的位置作为模板参数,此外,std::get返回的是tuple元素的引用

auto book = get<0>(item); //返回item的第一个成员
auto cnt = get<1>(item); //返回item的第二个成员

当tuple的成员较多时,想要表示tuple对象的类型往往会很复杂,我们可以使用下面两个模板函数来查询tuple成员的数量和类型

typedef decltype(item) trans;

Resources