zoukankan      html  css  js  c++  java
  • boost tuple

    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)

  • 相关阅读:
    uboot中fdt命令的使用
    unlocked_ioctl与compat_ioctl
    I2C中关于ACK和NACK的几点东西
    对IIC总线时序的一点理解以及ACK和NACK(NAK)
    usb Defined Class Codes
    排序检索数据
    【转载】5.Linux 网络编程——UDP编程
    【转载】4.Linux 网络编程——套接字的介绍
    【转载】3.Linux 网络编程——网络字节序、地址转换
    【转载】2. Linux 网络编程——网络字节序、地址转换
  • 原文地址:https://www.cnblogs.com/sssblog/p/11057887.html
Copyright © 2011-2022 走看看