描述 类 any 描述用于任何类型的单个值的类型安全容器。
1) 类 any 的对象存储任何满足构造函数要求的类型的一个实例或为空,而这被称为 any 类对象的状态。存储的实例被称作所含对象。若两个状态均为空,或均为非空且其所含对象等价,则两个状态等价。
代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 #include  <any>  #include  <iostream>  #include  <bitset>  #include  <vector>  #include  <algorithm>  int  main ()     std::cout << std::boolalpha;     std::bitset<5> mask ("11001" )  ;     std::bitset<5> val ("01111" )  ;     std::any amask = mask;     std::any aval = val;     val and_eq  mask;      std::cout << "bitset:\t"  << val << "\n" ;          std::any var = 1 ;     std::cout << var.type ().name () << ":\t"  << std::any_cast <int >(var) << '\n' ;     var = 2.2 ;     std::cout << var.type ().name () << ":\t"  << std::any_cast <double >(var) << '\n' ;     var = 3.3f ;     std::cout << var.type ().name () << ":\t"  << std::any_cast <float >(var) << '\n' ;     var = true ;     std::cout << var.type ().name () << ":\t"  << std::any_cast <bool >(var) << '\n' ;     var = mask;     std::cout << var.type ().name () << ":\t"  << std::any_cast<std::bitset<5>>(var) << '\n' ;          try      {         var = 4L ;         std::cout << std::any_cast <float >(var) << '\n' ;     }     catch  (const  std::bad_any_cast& e)     {         std::cout << "error:\t"  << e.what () << '\n' ;     }          var = 5.5f ;     if  (var.has_value ())     {         std::cout << var.type ().name () << '\n' ;     }          var.reset ();     if  (!var.has_value ())     {         std::cout << "has value:\t"  << "no value\n" ;     }          var.emplace<std::vector<char >>({ 'C' , '+' , '+' , '1' , '7' , '\0' });     std::cout << var.type ().name () << ":\t"  << std::any_cast<std::vector<char >>(var).data () << '\n' ;          const  std::vector<char >* cpv = std::any_cast<std::vector<char >>(&var);     std::cout << "for_each:\t" ;     std::for_each(cpv->cbegin (), cpv->cend (), [](char  const & c) { std::cout << c; });     std::cout << '\n' ;          var = 6 ;     int * i = std::any_cast <int >(&var);     std::cout << "point:\t"  << *i << "\n" ;     return  0 ; } 
输出 1 2 3 4 5 6 7 8 9 10 11 12 bitset: 01001 int:    1 double: 2.2 float:  3.3 bool:   true class std::bitset<5>:   11001 error:  Bad any_cast float has value:      no value class std::vector<char,class std::allocator<char> >:    C++17 for_each:       C++17 point:  6 
参考 https://zh.cppreference.com/w/cpp/utility/any