YSTest: any.h 文件参考

YSTest PreAlpha_b900_20201012 The YSLib Test Project

类 | 命名空间 | 类型定义 | 枚举 | 函数 | 变量
any.h 文件参考
YBaseLib » YStandardExtend

动态泛型类型。 更多...

`#include "typeinfo.h"`
`#include "utility.hpp"`
`#include "memory.hpp"`
`#include "exception.h"`
`#include "ref.hpp"`
`#include <initializer_list>`
any.h 的引用(Include)关系图:
此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

## 类

struct | ystdex::any_ops::with_handler_t< typename >
class | ystdex::any_ops::holder
| 抽象动态泛型持有者接口。 更多...
class | ystdex::any_ops::value_holder< _type >
| 值类型动态泛型持有者。 更多...
class | ystdex::any_ops::pointer_holder< _type, _tPointer >
| 指针类型动态泛型持有者。 更多...
union | ystdex::any_ops::any_trivial_local_data
| 能被动态泛型对象平凡原地存储的数据类型。 更多...
union | ystdex::any_ops::any_local_data
| 能被动态泛型对象原地存储的数据类型。 更多...
struct | ystdex::any_ops::use_holder_t
| 使用持有者标记。 更多...
class | ystdex::any_ops::details::memory_thunk< _tValue >
class | ystdex::any_ops::value_handler< _type, _bStoredLocally >
| 动态泛型对象值处理器。 更多...
class | ystdex::any_ops::ref_handler< _type >
| 动态泛型引用处理器。 更多...
class | ystdex::any_ops::holder_handler< _tHolder >
| 动态泛型对象持有者处理器。 更多...
class | ystdex::any_ops::allocator_value_handler< _tByteAlloc, _tValue >
| 分配器处理器。 更多...
struct | ystdex::any_ops::allocator_value_handler< _tByteAlloc, _tValue >::ator_del
class | ystdex::any_ops::allocator_holder_handler< _tByteAlloc, _tHolder >
| 使用分配器的动态泛型对象持有者处理器。 更多...
struct | ystdex::any_ops::wrap_handler< _type >
| 根据类型选择引用或值处理器。 更多...
class | ystdex::bad_any_cast
| 动态泛型转换失败异常。 更多...
struct | ystdex::details::alloc_tag< _vInPlace >
struct | ystdex::details::any_base
struct | ystdex::details::any_emplace< _tAny >
class | ystdex::any
| 基于类型擦除的动态泛型对象。 更多...
class | ystdex::void_ref_any

## 命名空间

| ystdex
| `<memory>` 特性测试宏。
| ystdex::any_ops
| ystdex::any_ops::details
| ystdex::details

## 类型定义

using | ystdex::any_ops::op_code = std::uint32_t
| 操作码。 更多...
using | ystdex::any_ops::any_storage = standard_layout_storage< aligned_storage_t< sizeof(any_local_data), std::alignment_of< any_local_data >::value > >
using | ystdex::any_ops::any_manager = void(*)(any_storage &, any_storage &, op_code)
| 动态泛型对象管理操作。 更多...
template<class _tHandler , typename... _tParams>
using | ystdex::any_ops::is_handler_constructible_t = is_constructible< any_ops::any_manager, decltype(any_ops::construct< _tHandler >(std::declval< any_ops::any_storage & >(), std::declval< _tParams >()...))>
| 判断处理器是否能被指定参数构造。 更多...
template<typename _type >
using | ystdex::any_ops::is_in_place_storable = and_< is_aligned_storable< any_storage, _type > >
| 判断类型是否可以作为 any_storage 原地存储。 更多...
template<class _tHolder >
using | ystdex::any_ops::check_holder_t = and_< is_decayed< _tHolder >, is_class< _tHolder >, is_base_of< holder, _tHolder >, is_convertible< _tHolder &, holder & > >
| 检查参数是否可作为持有者类型。 更多...
template<class _tAlloc , typename _type >
using | ystdex::any_ops::allocator_value_handler_t = allocator_value_handler< rebind_alloc_t< _tAlloc, byte >, _type >
| 取重绑定 byte 分配器的使用分配器构造时的处理器。 更多...
template<class _tAlloc , class _tHolder >
using | ystdex::any_ops::allocator_holder_handler_t = allocator_holder_handler< rebind_alloc_t< _tAlloc, byte >, _tHolder >
| 取重绑定 byte 分配器的使用分配器和持有者构造时的处理器。 更多...
template<typename _type >
using | ystdex::details::not_tag_t = nor_< is_instance_of< _type, vseq::_a< in_place_type_t > >, is_same< _type, std::allocator_arg_t >, is_same< _type, any_ops::use_holder_t >, is_instance_of< _type, vseq::_a< any_ops::with_handler_t > >, is_same< _type, alloc_tag<> >, is_same< _type, alloc_tag< true > >>
template<typename _type >
using | ystdex::details::decayed_not_tag_t = not_tag_t< decay_t< _type > >
template<typename _type >
using | ystdex::details::any_in_place_t = alloc_tag< any_ops::is_in_place_storable< decay_t< _type > >::value >
template<typename _tSelected , typename _type = void>
using | ystdex::exclude_tag_t = enable_if_t< details::decayed_not_tag_t< _tSelected >::value, _type >
| 排除选择类型为标签的重载。 更多...
template<typename... _tParams>
using | ystdex::exclude_tagged_params_t = enable_if_t< sizeof...(_tParams)==0 ? true :details::decayed_not_tag_t< vseq::front_t< empty_base< _tParams... > >>::value >
| 排除选择类型的第一个参数为标签的重载。 更多...

## 枚举

enum

ystdex::any_ops::base_op : op_code {
ystdex::any_ops::no_op, ystdex::any_ops::get_type, ystdex::any_ops::get_ptr, ystdex::any_ops::clone,
ystdex::any_ops::destroy, ystdex::any_ops::get_holder_type, ystdex::any_ops::get_holder_ptr, ystdex::any_ops::get_allocator_type,
ystdex::any_ops::get_allocator_ptr, ystdex::any_ops::clone_with_allocator, ystdex::any_ops::transfer_with_allocator, ystdex::any_ops::end_base_op
}

| 基本操作码。 更多...

## 函数

template<class _tHandler , typename... _tParams>
auto | ystdex::any_ops::construct (any_storage &storage, _tParams &&... args) -> enable_if_t< is_convertible< well_formed_t< decltype(_tHandler::manage), decltype(_tHandler::init(storage, std::forward< decltype(args)>(args)...))>, any_manager >::value, any_manager >
| 使用指定处理器初始化存储。 更多...
template<typename _type , typename _tOther , typename... _tParams>
any | ystdex::make_any (std::initializer_list< _tOther > il, _tParams &&... args)
template<typename _type >
_type | ystdex::any_cast (any &x)
| 动态泛型转换。 更多...
template<typename _type >
_type | ystdex::any_cast (const any &x)
template<typename _type >
_type | ystdex::any_cast (any &&x)
template<typename _type >
_type * | ystdex::any_cast (any *p)
template<typename _type >
const _type * | ystdex::any_cast (const any *p)
bool | ystdex::hold_same (const any &x, const any &y)
| 判断是否持有相同对象。 更多...
template<typename _type >
_type * | ystdex::unchecked_any_cast (any *p)
| 未检查的动态泛型转换。 更多...
template<typename _type >
const _type * | ystdex::unchecked_any_cast (const any *p)
template<typename _type >
_type * | ystdex::unsafe_any_cast (any *p)
| 非安全动态泛型转换。 更多...
template<typename _type >
const _type * | ystdex::unsafe_any_cast (const any *p)

## 变量

const struct ystdex::any_ops::use_holder_t | ystdex::any_ops::use_holder

## 详细描述

动态泛型类型。

版本
  r5070

作者
  FrankHB frank.nosp@m.hb19.nosp@m.89@gm.nosp@m.ail..nosp@m.com

自从
  build 247

创建时间:
  2011-09-26 07:55:44 +0800

修改时间:
  2020-10-07 09:41 +0800

文本编码:
  UTF-8

模块名称:
  YStandardEx::Any

参见
  ISO C++17 [any] 。
  http://www.boost.org/doc/libs/1_60_0/doc/html/any/reference.html 。

在文件 any.h 中定义.