YSTest: ystdex::any类 参考

YSTest PreAlpha_b800_20170810 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

- 类列表
- 类索引
- 类继承关系
- 类成员

Public 成员函数 | 所有成员列表
ystdex::any类 参考

基于类型擦除的动态泛型对象。 更多...

`#include <any.h>`

类 ystdex::any 继承关系图:
[图例]
ystdex::any 的协作图:
[图例]

## Public 成员函数

| any ()=default
template<typename _type , typename = exclude_self_t<any, _type>>
| any (_type &&x)
template<typename _type >
| any (_type &&x, any_ops::use_holder_t)
template<class _tHandler , typename... _tParams>
| any (any_ops::with_handler_t< _tHandler > t, _tParams &&...args)
| any (const any &)
| any (any &&a)
| ~any ()
template<typename _type , typename = exclude_self_t<any, _type>>
any & | operator= (_type &&x)
any & | operator= (const any &a)
| 复制赋值：使用复制和交换。 更多...
any & | operator= (any &&a)
| 转移赋值：使用复制和交换。 更多...
void | reset ()
void | swap (any &a)
const type_info & | type () const
template<typename _type , typename... _tParams>
| any (in_place_type_t< _type >, _tParams &&...args)
template<typename _tHolder >
| any (any_ops::use_holder_t, std::unique_ptr< _tHolder > p)
| 构造：使用指定持有者。 更多...
template<typename _tHolder >
| any (any_ops::use_holder_t, _tHolder &&h)
template<typename _tHolder , typename... _tParams>
| any (any_ops::use_holder_t, in_place_type_t< _tHolder >, _tParams &&...args)
void * | get () const
any_ops::holder * | get_holder () const
template<typename _type >
_type * | target ()
| 取目标指针。 更多...
template<typename _type >
const _type * | target () const
void * | unchecked_get () const
| 取包含对象的指针。 更多...
any_ops::holder * | unchecked_get_holder () const
| 取持有者指针。 更多...
const type_info & | unchecked_type () const
| 取包含对象的类型。 更多...

## 相关函数

(请注意: 这些不是成员函数.)
void | swap (any &x, any &y)
| 交换对象。 更多...
template<typename _type , typename... _tParams>
any | make_any (_tParams &&...args)
| 创建 any 对象。 更多...
template<typename _type >
_type * | any_cast (any *p)
| 动态泛型转换。 更多...
template<typename _tValue >
_tValue | any_cast (any &x)
template<typename _tValue >
_tValue | any_cast (any &&x)
bool | hold_same (const any &x, const any &y)
| 判断是否持有相同对象。 更多...
template<typename _type >
_type * | unchecked_any_cast (any *p)
| 未检查的动态泛型转换。 更多...
template<typename _type >
const _type * | unchecked_any_cast (const any *p)
template<typename _type >
_type * | unsafe_any_cast (any *p)
| 非安全动态泛型转换。 更多...
template<typename _type >
const _type * | unsafe_any_cast (const any *p)

## 额外继承的成员函数

Private 成员函数 继承自 ystdex::details::any_base
| any_base ()=default
template<class _tHandler , typename... _tParams>
| any_base (any_ops::with_handler_t< _tHandler >, _tParams &&...args)
any_ops::any_storage & | call (any_ops::any_storage &, any_ops::op_code) const
void | clear ()
void | copy (const any_base &)
void | destroy ()
bool | has_value () const
void * | get () const
any_ops::holder * | get_holder () const
any_ops::any_storage & | get_storage () const
void | swap (any_base &)
template<typename _type >
_type * | target ()
template<typename _type >
const _type * | target () const
const type_info & | type () const
template<typename _type , typename... _tParams>
_type | unchecked_access (any_ops::op_code op, _tParams &&...args) const
template<typename _type >
_type | unchecked_access (default_init_t, any_ops::op_code op) const
template<typename _type >
_type | unchecked_access (any_ops::any_storage &t, any_ops::op_code op) const
| any_base (const any_base &a)
| ~any_base ()=default
Private 成员函数 继承自 ystdex::details::any_emplace< any >
void | emplace (_tParams &&...args)
void | emplace (std::initializer_list< _tOther > il, _tParams &&...args)
void | emplace (any_ops::use_holder_t, _tParams &&...args)
void | emplace_with_handler (_tParams &&...args)
Private 属性 继承自 ystdex::details::any_base
any_ops::any_storage | storage {}
any_ops::any_manager | manager {}

## 详细描述

基于类型擦除的动态泛型对象。

注解
  值语义。基本接口和语义同 std::experimental::any 提议 和 boost::any （对应接口以前者为准）。

警告
  非虚析构。

参见
  WG21 N4606 20.8.3[any.class] 。
  http://www.boost.org/doc/libs/1_53_0/doc/html/any/reference.html#any.ValueType 。

自从
  build 331

在文件 any.h 第 845 行定义.

## 构造及析构函数说明

ystdex::any::any | ( |  | ) |

inlinedefault

后置条件
  `!has_value`() 。

template<typename _type , typename = exclude_self_t<any, _type>>

ystdex::any::any | ( | _type && | x | ) |

inline

注解
  引用包装类型的处理为 YStandardEx 扩展，此时不具有所有权。

警告
  引用包装存储无视 cv 修饰符。访问不检查动态类型，应注意避免未定义行为。

自从
  build 448

在文件 any.h 第 861 行定义.

template<typename _type , typename... _tParams>

ystdex::any::any | ( | in_place_type_t< _type > | ,
|  | _tParams &&... | args
| ) |  |

inline

注解
  YStandardEx 扩展。

自从
  build 717

在文件 any.h 第 870 行定义.

template<typename _tHolder >

ystdex::any::any | ( | any_ops::use_holder_t | ,
|  | std::unique_ptr< _tHolder > | p
| ) |  |

inline

构造：使用指定持有者。

自从
  build 680

在文件 any.h 第 881 行定义.

template<typename _tHolder >

ystdex::any::any | ( | any_ops::use_holder_t | ,
|  | _tHolder && | h
| ) |  |

inline

在文件 any.h 第 887 行定义.

template<typename _tHolder , typename... _tParams>

ystdex::any::any | ( | any_ops::use_holder_t | ,
|  | in_place_type_t< _tHolder > | ,
|  | _tParams &&... | args
| ) |  |

inline

自从
  build 717

在文件 any.h 第 894 行定义.

template<typename _type >

ystdex::any::any | ( | _type && | x,
|  | any_ops::use_holder_t |
| ) |  |

inline

在文件 any.h 第 901 行定义.

template<class _tHandler , typename... _tParams>

ystdex::any::any | ( | any_ops::with_handler_t< _tHandler > | t,
|  | _tParams &&... | args
| ) |  |

inline

自从
  build 687

在文件 any.h 第 908 行定义.

ystdex::any::any | ( | const any & | a | ) |

在文件 any.cpp 第 129 行定义.

参考 ystdex::details::any_base::copy() , 以及 ystdex::details::any_base::manager.

函数调用图:

ystdex::any::any | ( | any && | a | ) |

inline

在文件 any.h 第 913 行定义.

参考 YSLib::a.

ystdex::any::~any | ( |  | ) |

自从
  build 382

在文件 any.cpp 第 135 行定义.

参考 ystdex::details::any_base::destroy() , 以及 ystdex::details::any_base::manager.

函数调用图:

## 成员函数说明

void* ystdex::any::get | ( |  | ) | const

inline

注解
  YStandardEx 扩展。

自从
  build 352

在文件 any.h 第 957 行定义.

参考自 hold_same().

这是这个函数的调用关系图:

any_ops::holder* ystdex::any::get_holder | ( |  | ) | const

inline

在文件 any.h 第 963 行定义.

参考自 YSLib::ValueObject::Equals(), YSLib::ValueObject::EqualsRaw() , 以及 YSLib::ValueObject::GetHolderRef().

这是这个函数的调用关系图:
template<typename _type , typename = exclude_self_t<any, _type>>

any& ystdex::any::operator= | ( | _type && | x | ) |

inline

自从
  build 687

在文件 any.h 第 924 行定义.

参考 swap(), NPL::x , 以及 yforward.

函数调用图:

any& ystdex::any::operator= | ( | const any & | a | ) |

inline

复制赋值：使用复制和交换。

自从
  build 332

在文件 any.h 第 934 行定义.

参考 swap().

函数调用图:

any& ystdex::any::operator= | ( | any && | a | ) |

inline

转移赋值：使用复制和交换。

自从
  build 332

在文件 any.h 第 944 行定义.

参考 YSLib::a , 以及 swap().

函数调用图:

void ystdex::any::reset | ( |  | ) |

自从
  build 717

在文件 any.cpp 第 142 行定义.

参考 ystdex::details::any_base::clear() , 以及 ystdex::details::any_base::manager.

函数调用图:

void ystdex::any::swap | ( | any & | a | ) |

inline

在文件 any.h 第 996 行定义.

参考 YSLib::a , 以及 ystdex::swap().

参考自 operator=().

函数调用图:

这是这个函数的调用关系图:
template<typename _type >

_type* ystdex::any::target | ( |  | ) |

inline

取目标指针。

返回
  若存储目标类型和模板参数相同则为指向存储对象的指针值，否则为空指针值。

注解
  YStandardEx 扩展。

自从
  build 352

在文件 any.h 第 1010 行定义.

template<typename _type >

const _type* ystdex::any::target | ( |  | ) | const

inline

在文件 any.h 第 1016 行定义.

const type_info& ystdex::any::type | ( |  | ) | const

inline

自从
  build 683

在文件 any.h 第 1024 行定义.

参考自 any_cast() , 以及 ystdex::void_ref_any::operator _type().

这是这个函数的调用关系图:

void* ystdex::any::unchecked_get | ( |  | ) | const

inline

取包含对象的指针。

在文件 any.h 第 1042 行定义.

参考 ystdex::details::get().

函数调用图:

any_ops::holder* ystdex::any::unchecked_get_holder | ( |  | ) | const

inline

取持有者指针。

在文件 any.h 第 1049 行定义.

const type_info& ystdex::any::unchecked_type | ( |  | ) | const

inline

取包含对象的类型。

自从
  build 683

在文件 any.h 第 1059 行定义.

## 友元及相关函数文档

template<typename _type >

_type * any_cast | ( | any * | p | ) |

related

动态泛型转换。

返回
  当 `p && p->type() == ystdex::type_id<remove_pointer_t<_tPointer>>()` 时 为指向对象的指针，否则为空指针。

注解
  语义同 `boost::any_cast` 。

自从
  build 671

待办事项:
  检验特定环境（如使用动态库时）比较 std::type_info::name() 的必要性。

在文件 any.h 第 1114 行定义.

参考 CHRLib::p().

函数调用图:
template<typename _tValue >

_tValue any_cast | ( | any & | x | ) |

related

异常

  bad_any_cast | 当 `x.type() != ystdex::type_id<remove_reference_t<_tValue>>()` 。

在文件 any.h 第 1132 行定义.

参考 CHRLib::p() , 以及 type().

函数调用图:
template<typename _tValue >

_tValue any_cast | ( | any && | x | ) |

related

自从
  build 671

在文件 any.h 第 1155 行定义.

参考 CHRLib::p() , 以及 type().

函数调用图:

bool hold_same | ( | const any & | x,
|  | const any & | y
| ) |  |

related

判断是否持有相同对象。

注解
  YSandardEx 扩展。

自从
  build 748

在文件 any.h 第 1175 行定义.

参考 get().

函数调用图:

void swap | ( | any & | x,
|  | any & | y
| ) |  |

related

交换对象。

参见
  WG21 N4606 20.8.4[any.nonmembers] 。

自从
  build 398

在文件 any.h 第 1075 行定义.

参考 NPL::x , 以及 YSLib::UI::y.

template<typename _type >

_type * unchecked_any_cast | ( | any * | p | ) |

related

未检查的动态泛型转换。

注解
  对非空对象语义同非公开接口 `boost::unsafe_any_cast` 。

自从
  build 677

前置条件
  断言： `p && p->has_value() && p->unchecked_type() == ystdex::type_id<_type>()` 。

在文件 any.h 第 1191 行定义.

参考 CHRLib::p() , 以及 yconstraint.

函数调用图:
template<typename _type >

const _type * unchecked_any_cast | ( | const any * | p | ) |

related

前置条件
  断言： `p && p->has_value() && p->unchecked_type() == ystdex::type_id<const _type>()` 。

在文件 any.h 第 1204 行定义.

参考 CHRLib::p() , 以及 yconstraint.

函数调用图:
template<typename _type >

_type * unsafe_any_cast | ( | any * | p | ) |

related

非安全动态泛型转换。

注解
  语义同非公开接口 `boost::unsafe_any_cast` 。

自从
  build 673

前置条件
  断言： `p && p->type() == ystdex::type_id<_type>()` 。

在文件 any.h 第 1221 行定义.

参考 CHRLib::p() , 以及 yconstraint.

函数调用图:
template<typename _type >

const _type * unsafe_any_cast | ( | const any * | p | ) |

related

前置条件
  断言： `p && p->type() == ystdex::type_id<const _type>()` 。

在文件 any.h 第 1230 行定义.

参考 CHRLib::p() , 以及 yconstraint.

函数调用图:

该类的文档由以下文件生成:

- any.h
- any.cpp