boost::tuple is a generalized version of std::pair. While std::pair can only store exactly two values, boost::tuple lets you choose how many values to store.
1. boost::tuple replacing std::pair
#include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple_io.hpp> #include <iostream> #include <string> int main() { typedef boost::tuple<std::string, int> animal;
typedef boost::tuple<std::string, int, bool> animal2; animal a("cat", 4);
animal2 b("cat", 4, true); std::cout << a << std::endl;
std::cout << std::boolalpha << b << std::endl; return 0; }
输出为:
(cat 4)
(cat, 4, true)
2. creating tuples with boost::make_tuple()
#include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple_io.hpp> #include <iostream> int main() { std::cout.setf(std::ios::boolalpha); std::cout << boost::make_tuple("cat", 4, true) << std::endl; return 0; }
boost::make_tuple() works like the helper function std::make_pair() for std::pair
3. reading and writing elements of a tuple
#include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple_io.hpp> #include <string> #include <iostream> int main() { typedef boost::tuple<std::string, int, bool> animal; animal a = boost::make_tuple("cat", 4, true); std::cout << a.get<0>() << std::endl; std::cout << boost::get<0>(a) << std::endl; a.get<0>() = "dog"; std::cout << std::boolalpha << a << std::endl; return 0; }
输出为:
cat
cat
(dog 4 true)
There are two ways to access values in a tuple. You can call the member function get(), or you can pass the tuple to the free-standing function boost::get(). In both cases, the index of the corrsponding element in the tuple must be provided as a template parameter. The member function get() and the free-standing function boost::get() both return a reference that allows you to change a value inside a tuple.
4. creating a tier with boost::tie()
Boost.Tuple supports a specific form of tuples called tier. Tiers are tuples whose elements are all reference types. They can be constructed with the function boost::tie()
#include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple_io.hpp> #include <string> #include <iostream> int main() { typedef boost::tuple<std::string&, int&, bool&> animal; std::string name = "cat"; int legs = 4; bool tail = true; animal a = boost::tie(name, legs, tail); name = "dog"; std::cout << std::boolalpha << a << std::endl; animal b = boost::make_tuple(boost::ref(name), boost::ref(legs), boost::ref(tail)); name = "animal"; std::cout << std::boolalpha << b << std::endl; return 0; }
输出为:
(dog 4 true)
(animal 4 true)