# 标准库头文件 <any>

< cpp‎ | header

此头文件是通用工具库的一部分。

### 类
any (C++17) | 可保有任何可复制构造 (CopyConstructible) 类型的实例的对象。 (类)
bad_any_cast (C++17) | 当类型不匹配时按值返回形式的 `any_cast` 所抛出的异常 (类)
### 函数
std::swap(std::any) (C++17) | 特化 std::swap 算法 (函数)
make_any (C++17) | 创建 `any` 对象 (函数模板)
any_cast (C++17) | 对被容纳对象的类型安全访问 (函数模板)

### 概要

    namespace std {
      // 类 bad_any_cast
      class bad_any_cast;

      // 类 any
      class any;

      // 非成员函数
      void swap(any& x, any& y) noexcept;

      template<class T, class... Args>
        any make_any(Args&&... args);
      template<class T, class U, class... Args>
        any make_any(initializer_list<U> il, Args&&... args);

      template<class T>
        T any_cast(const any& operand);
      template<class T>
        T any_cast(any& operand);
      template<class T>
        T any_cast(any&& operand);

      template<class T>
        const T* any_cast(const any* operand) noexcept;
      template<class T>
        T* any_cast(any* operand) noexcept;
    }

#### 类 std::bad_any_cast

    namespace std {
      class bad_any_cast : public bad_cast {
      public:
        // 特殊成员函数的规范见 [exception]
        const char* what() const noexcept override;
      };
    }

#### 类 std::any

    namespace std {
      class any {
      public:
        // 构造与析构
        constexpr any() noexcept;

        any(const any& other);
        any(any&& other) noexcept;

        template<class T>
          any(T&& value);

        template<class T, class... Args>
          explicit any(in_place_type_t<T>, Args&&...);
        template<class T, class U, class... Args>
          explicit any(in_place_type_t<T>, initializer_list<U>, Args&&...);

        ~any();

        // 赋值
        any& operator=(const any& rhs);
        any& operator=(any&& rhs) noexcept;

        template<class T>
          any& operator=(T&& rhs);

        // 修改器
        template<class T, class... Args>
          decay_t<T>& emplace(Args&&...);
        template<class T, class U, class... Args>
          decay_t<T>& emplace(initializer_list<U>, Args&&...);
        void reset() noexcept;
        void swap(any& rhs) noexcept;

        // 观察器
        bool has_value() const noexcept;
        const type_info& type() const noexcept;
      };
    }