YSTest: YSLib::ValueObject类 参考

YSTest PreAlpha_b900_20201012 The YSLib Test Project

Public 类型 | Public 成员函数 | Public 属性 | Private 类型 | Private 成员函数 | Private 属性 | 相关函数 | 所有成员列表
YSLib::ValueObject类 参考

值类型对象类。 更多...

`#include <YObject.h>`

类 YSLib::ValueObject 继承关系图:
[图例]
YSLib::ValueObject 的协作图:
[图例]

## Public 类型

using | Content = any
| 储存的内容。 更多...
template<typename _type >
using | InPlaceStorable = any_ops::is_in_place_storable< _type >
| 判断是否可不附加分配地原地存储。 更多...

## Public 成员函数

| DefDeCtor (ValueObject) template< typename _type
| 无参数构造。 更多...
| yimpl (typename=ystdex::exclude_self_t< ValueObject, _type >)
| yimpl (typename=ystdex::exclude_self_t< std::allocator_arg_t, _type >)> inline ValueObject(_type &&obj)
template<typename _type , class _tAlloc , yimpl(typename=ystdex::exclude_self_t< ValueObject, _type >) >
| ValueObject (std::allocator_arg_t, const _tAlloc &a, _type &&arg)
| 构造：使用对象引用和分配器。 更多...
template<typename _type , typename... _tParams>
| ValueObject (in_place_type_t< _type >, _tParams &&... args)
| 构造：使用对象初始化参数。 更多...
template<typename _type , class _tAlloc , typename... _tParams>
| ValueObject (std::allocator_arg_t, const _tAlloc &a, in_place_type_t< _type >, _tParams &&... args)
| 构造：使用对象和分配器初始化参数。 更多...
template<typename _tHolder , typename... _tParams>
| ValueObject (any_ops::use_holder_t, in_place_type_t< _tHolder >, _tParams &&... args)
| 构造：使用持有者。 更多...
template<typename _tHolder , class _tAlloc , typename... _tParams>
| ValueObject (std::allocator_arg_t, const _tAlloc &a, any_ops::use_holder_t, in_place_type_t< _tHolder >, _tParams &&... args)
| 构造：使用持有者和分配器。 更多...
template<typename _type >
| ValueObject (_type &obj, OwnershipTag<>)
| 构造：使用无所有权的引用。 更多...
template<typename _type >
| ValueObject (_type *p, PointerTag)
| 构造：使用对象指针。 更多...
template<typename _type >
| ValueObject (unique_ptr< _type > &&p, PointerTag)
| 构造：使用对象 unique_ptr 指针。 更多...
| DefDeCopyMoveCtorAssignment (ValueObject) template< class _tAlloc > inline ValueObject(std
template<class _tAlloc >
| ValueObject (std::allocator_arg_t, const _tAlloc &a, ValueObject &&vo)
| DefDeDtor (ValueObject) DefBoolNeg(explicit
| 析构：默认实现。 更多...
content | has_value ()) YB_ATTR_nodiscard YB_PURE friend PDefHOp(bool
| 比较相等：参数都为空或都非空且存储的对象相等。 更多...
content const ValueObject const ValueObject &y | ImplRet (x.Equals(y)) template< typename _type > YB_ATTR_nodiscard YB_PURE friend inline bool operator
| 比较相等：存储的对象值相等。 更多...
YB_ATTR_nodiscard YB_PURE IValueHolder & | GetHolderRef () const
| 取持有者引用。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE _type & | GetObject ()
| 取指定类型的对象。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE const _type & | GetObject () const
template<typename _type >
YB_ATTR_nodiscard YB_PURE _type & | Access ()
| 访问指定类型对象。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE const _type & | Access () const
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< _type > | AccessPtr () ynothrow
| 访问指定类型对象指针。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< const _type > | AccessPtr () const ynothrow
| PDefH (void, Clear,) ynothrow ImplExpr(content.reset()) YB_ATTR_nodiscard PDefH(ValueObject
| 清除。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE bool | Equals (const _type &x) const
YB_ATTR_nodiscard YB_PURE bool | EqualsRaw (const void *) const
YB_ATTR_nodiscard YB_PURE bool | EqualsUnchecked (const void *) const
template<typename _type , typename... _tParams, yimpl(typename=ystdex::exclude_tagged_params_t< _tParams... >) >
void | emplace (_tParams &&... args)
template<typename _type , class _tAlloc , typename... _tParams>
void | emplace (std::allocator_arg_t, const _tAlloc &a, _tParams &&... args)
template<typename _type >
void | emplace (_type *p, PointerTag)
friend | PDefH (void, swap, ValueObject &x, ValueObject &y) ynothrow ImplExpr(x.content.swap(y.content)) YB_ATTR_nodiscard PDefH(const type_info &
| 交换。 更多...

## Public 属性

content const ValueObject & | x
| CopyMove
friend | type

## Private 类型

template<typename _type , class _tAlloc >
using | alloc_holder_t = AllocatorHolder< ystdex::decay_t< _type >, ystdex::rebind_alloc_t< _tAlloc, byte > >
template<typename _type >
using | add_vh_t = ystdex::cond_t< IsValueHolder< _type >, _type, ValueHolder< _type > >

## Private 成员函数

| ValueObject (const IValueHolder &h, const any &x, IValueHolder::Creation c)
| 构造：使用持有者、源和和动态创建选项。 更多...

## Private 属性

Content | content

## 相关函数

(请注意: 这些不是成员函数.)
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< _type > | AccessPtr (ValueObject &vo) ynothrow

## 详细描述

值类型对象类。

前置条件
  满足 CopyConstructible 。

警告
  非虚析构。
  若修改子节点的 name 则行为未定义。

自从
  build 217

具有值语义和深复制语义的对象。

在文件 YObject.h 第 1067 行定义.

## 成员类型定义说明

## ◆ add_vh_t

template<typename _type >

using YSLib::ValueObject::add_vh_t = ystdex::cond_t<IsValueHolder<_type>, _type, ValueHolder<_type> >

private

自从
  build 851

在文件 YObject.h 第 1089 行定义.

## ◆ alloc_holder_t

template<typename _type , class _tAlloc >

using YSLib::ValueObject::alloc_holder_t = AllocatorHolder<ystdex::decay_t<_type>, ystdex::rebind_alloc_t<_tAlloc, byte> >

private

自从
  build 848

在文件 YObject.h 第 1085 行定义.

## ◆ Content

using YSLib::ValueObject::Content = any

储存的内容。

自从
  build 748

在文件 YObject.h 第 1074 行定义.

## ◆ InPlaceStorable

template<typename _type >

using YSLib::ValueObject::InPlaceStorable = any_ops::is_in_place_storable<_type>

判断是否可不附加分配地原地存储。

自从
  build 882

在文件 YObject.h 第 1080 行定义.

## 构造及析构函数说明

## ◆ ValueObject() [1/10]

template<typename _type , class _tAlloc , yimpl(typename=ystdex::exclude_self_t< ValueObject, _type >) >

YSLib::ValueObject::ValueObject | ( | std::allocator_arg_t | ,
|  | const _tAlloc & | a,
|  | _type && | arg
| ) |  |

inline

构造：使用对象引用和分配器。

前置条件
  obj 可作为转移构造参数。

自从
  build 899

在文件 YObject.h 第 1127 行定义.

## ◆ ValueObject() [2/10]

template<typename _type , typename... _tParams>

YSLib::ValueObject::ValueObject | ( | in_place_type_t< _type > | ,
|  | _tParams &&... | args
| ) |  |

inlineexplicit

构造：使用对象初始化参数。

模板参数

  _tParams | 目标类型初始化参数类型。
  _type | 目标类型。

前置条件
  _type 可被 _tParams 参数初始化。

自从
  build 678

在文件 YObject.h 第 1144 行定义.

## ◆ ValueObject() [3/10]

template<typename _type , class _tAlloc , typename... _tParams>

YSLib::ValueObject::ValueObject | ( | std::allocator_arg_t | ,
|  | const _tAlloc & | a,
|  | in_place_type_t< _type > | ,
|  | _tParams &&... | args
| ) |  |

inline

构造：使用对象和分配器初始化参数。

自从
  build 853

在文件 YObject.h 第 1154 行定义.

## ◆ ValueObject() [4/10]

template<typename _tHolder , typename... _tParams>

YSLib::ValueObject::ValueObject | ( | any_ops::use_holder_t | ,
|  | in_place_type_t< _tHolder > | ,
|  | _tParams &&... | args
| ) |  |

inline

构造：使用持有者。

前置条件
  持有者实现 IValueHolder 。

自从
  builld 783

在文件 YObject.h 第 1172 行定义.

## ◆ ValueObject() [5/10]

template<typename _tHolder , class _tAlloc , typename... _tParams>

YSLib::ValueObject::ValueObject | ( | std::allocator_arg_t | ,
|  | const _tAlloc & | a,
|  | any_ops::use_holder_t | ,
|  | in_place_type_t< _tHolder > | ,
|  | _tParams &&... | args
| ) |  |

inline

构造：使用持有者和分配器。

自从
  builld 891

在文件 YObject.h 第 1186 行定义.

## ◆ ValueObject() [6/10]

YSLib::ValueObject::ValueObject | ( | const IValueHolder & | h,
|  | const any & | x,
|  | IValueHolder::Creation | c
| ) |  |

inlineprivate

构造：使用持有者、源和和动态创建选项。

自从
  build 864

在文件 YObject.h 第 1202 行定义.

## ◆ ValueObject() [7/10]

template<typename _type >

YSLib::ValueObject::ValueObject | ( | _type & | obj,
|  | OwnershipTag<> |
| ) |  |

inline

构造：使用无所有权的引用。

自从
  build 747

在文件 YObject.h 第 1213 行定义.

## ◆ ValueObject() [8/10]

template<typename _type >

YSLib::ValueObject::ValueObject | ( | _type * | p,
|  | PointerTag |
| ) |  |

inline

构造：使用对象指针。

注解
  得到包含指针指向的指定对象的实例，并获得所有权。
  使用 PointerHolder 管理资源（默认使用 delete 释放资源）。

自从
  build 340

在文件 YObject.h 第 1231 行定义.

## ◆ ValueObject() [9/10]

template<typename _type >

YSLib::ValueObject::ValueObject | ( | unique_ptr< _type > && | p,
|  | PointerTag |
| ) |  |

inline

构造：使用对象 unique_ptr 指针。

自从
  build 450

在文件 YObject.h 第 1241 行定义.

引用了 platform::p.

## ◆ ValueObject() [10/10]

template<class _tAlloc >

YSLib::ValueObject::ValueObject | ( | std::allocator_arg_t | ,
|  | const _tAlloc & | a,
|  | ValueObject && | vo
| ) |  |

inline

自从
  build 899

在文件 YObject.h 第 1258 行定义.

## 成员函数说明

## ◆ Access() [1/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE _type& YSLib::ValueObject::Access | ( |  | ) |

inline

访问指定类型对象。

异常

  std::bad_cast | 空实例或类型检查失败 。

自从
  build 334

在文件 YObject.h 第 1364 行定义.

被这些函数引用 YSLib::UI::EventRef::CastWith() , 以及 YSLib::UI::EventRef::DefDeCopyMoveCtorAssignment().

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

## ◆ Access() [2/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE const _type& YSLib::ValueObject::Access | ( |  | ) | const

inline

在文件 YObject.h 第 1370 行定义.

## ◆ AccessPtr() [1/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE observer_ptr<const _type> YSLib::ValueObject::AccessPtr | ( |  | ) | const

inline

在文件 YObject.h 第 1389 行定义.

引用了 ystdex::make_observer().

函数调用图:

## ◆ AccessPtr() [2/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE observer_ptr<_type> YSLib::ValueObject::AccessPtr | ( |  | ) |

inline

访问指定类型对象指针。

自从
  build 670

在文件 YObject.h 第 1383 行定义.

引用了 ystdex::make_observer().

函数调用图:

## ◆ DefDeCopyMoveCtorAssignment()

YSLib::ValueObject::DefDeCopyMoveCtorAssignment | ( | ValueObject |  | ) |

inline

自从
  build 332
  build 899

在文件 YObject.h 第 1248 行定义.

## ◆ DefDeCtor()

YSLib::ValueObject::DefDeCtor | ( | ValueObject |  | ) |

无参数构造。

注解
  得到空实例。

自从
  build 296

构造：使用对象引用。

前置条件
  obj 可作为转移构造参数。

注解
  使用 ValueHolder 实例视为持有者而不视为被初始化的值。

自从
  build 851

## ◆ DefDeDtor()

YSLib::ValueObject::DefDeDtor | ( | ValueObject |  | ) |

析构：默认实现。

自从
  build 332

判断是否为空或非空。

自从
  build 320

## ◆ emplace() [1/3]

template<typename _type , typename... _tParams, yimpl(typename=ystdex::exclude_tagged_params_t< _tParams... >) >

void YSLib::ValueObject::emplace | ( | _tParams &&... | args | ) |

inline

自从
  build 759

在文件 YObject.h 第 1508 行定义.

引用了 YSLib::args, ystdex::details::any_emplace< _tAny >::emplace(), ystdex::any_ops::use_holder , 以及 yforward.

函数调用图:

## ◆ emplace() [2/3]

template<typename _type >

void YSLib::ValueObject::emplace | ( | _type * | p,
|  | PointerTag |
| ) |  |

inline

在文件 YObject.h 第 1529 行定义.

引用了 ystdex::details::any_emplace< _tAny >::emplace(), platform::p , 以及 ystdex::any_ops::use_holder.

函数调用图:

## ◆ emplace() [3/3]

template<typename _type , class _tAlloc , typename... _tParams>

void YSLib::ValueObject::emplace | ( | std::allocator_arg_t | ,
|  | const _tAlloc & | a,
|  | _tParams &&... | args
| ) |  |

inline

自从
  build 863

在文件 YObject.h 第 1517 行定义.

引用了 YSLib::a, YSLib::args, ystdex::details::any_emplace< _tAny >::emplace(), ystdex::any_ops::use_holder , 以及 yforward.

函数调用图:

## ◆ Equals()

template<typename _type >

bool YSLib::ValueObject::Equals | ( | const _type & | x | ) | const

inline

在文件 YObject.h 第 1429 行定义.

引用了 ystdex::addressof(), ystdex::any::get_holder() , 以及 x.

函数调用图:

## ◆ EqualsRaw()

bool YSLib::ValueObject::EqualsRaw | ( | const void * | p | ) | const

前置条件
  参数为空指针值或持有的对象去除 const 后具有和参数相同动态类型的对象。

在文件 YObject.cpp 第 83 行定义.

引用了 content, ystdex::any::get_holder() , 以及 platform::p.

函数调用图:

## ◆ EqualsUnchecked()

bool YSLib::ValueObject::EqualsUnchecked | ( | const void * | p | ) | const

前置条件
  间接断言：持有的对象非空。
  持有的对象去除 const 后具有和参数相同动态类型的对象。

在文件 YObject.cpp 第 91 行定义.

引用了 GetHolderRef() , 以及 platform::p.

函数调用图:

## ◆ GetHolderRef()

IValueHolder & YSLib::ValueObject::GetHolderRef | ( |  | ) | const

取持有者引用。

前置条件
  持有者指针非空。

在文件 YObject.cpp 第 58 行定义.

引用了 content, platform::Deref() , 以及 ystdex::any::get_holder().

被这些函数引用 EqualsUnchecked().

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

## ◆ GetObject() [1/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE _type& YSLib::ValueObject::GetObject | ( |  | ) |

inline

取指定类型的对象。

前置条件
  间接断言：存储对象类型和访问的类型一致。

异常

  异常中立：由持有者抛出。 |

自从
  build 853

在文件 YObject.h 第 1344 行定义.

引用了 platform::Deref().

函数调用图:

## ◆ GetObject() [2/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE const _type& YSLib::ValueObject::GetObject | ( |  | ) | const

inline

在文件 YObject.h 第 1350 行定义.

引用了 platform::Deref().

函数调用图:

## ◆ has_value()

content YSLib::ValueObject::has_value | ( |  | ) |

比较相等：参数都为空或都非空且存储的对象相等。

参见
  Equals

自从
  build 673

## ◆ ImplRet()

YSLib::ValueObject::ImplRet | ( | x. | Equalsy | ) |

比较相等：存储的对象值相等。

取以指定持有者选项创建的副本。

自从
  build 753
  build 761

判断相等。

参见
  IValueHolder::Equals

自从
  bulid 752

比较参数和持有的对象。

引用了 x , 以及 YSLib::UI::y.

## ◆ PDefH() [1/2]

YSLib::ValueObject::PDefH | ( | void | ,
|  | Clear |
| ) |  |

清除。

后置条件
  `*this == ValueObject()` 。

自从
  build 296

取自身的复制初始化转移结果：按是否具有唯一所有权选择转移或复制值对象。

自从
  build 787

## ◆ PDefH() [2/2]

YSLib::ValueObject::PDefH | ( | void | ,
|  | swap | ,
|  | ValueObject & | x,
|  | ValueObject & | y
| ) |  | const &

交换。

自从
  build 710

取持有的对象的类型。

参见
  any::type

自从
  build 799

## ◆ yimpl() [1/2]

YSLib::ValueObject::yimpl | ( | typename | = `ystdex::exclude_self_t<std::allocator_arg_t, _type>` | ) | &&

inline

在文件 YObject.h 第 1113 行定义.

## ◆ yimpl() [2/2]

YSLib::ValueObject::yimpl | ( | typename | = `ystdex::exclude_self_t<ValueObject, _type>` | ) |

## 友元及相关函数文档

## ◆ AccessPtr()

template<typename _type >

YB_ATTR_nodiscard YB_PURE observer_ptr< _type > AccessPtr | ( | ValueObject & | vo | ) |

related

自从
  build 748
  build 749

在文件 YObject.h 第 1562 行定义.

引用了 YSLib::vo.

## 类成员变量说明

## ◆ content

Content YSLib::ValueObject::content

private

自从
  build 748

在文件 YObject.h 第 1096 行定义.

被这些函数引用 EqualsRaw() , 以及 GetHolderRef().

## ◆ CopyMove

YSLib::ValueObject::CopyMove

在文件 YObject.h 第 1407 行定义.

## ◆ type

friend YSLib::ValueObject::type

在文件 YObject.h 第 1549 行定义.

## ◆ x

content const ValueObject& YSLib::ValueObject::x

在文件 YObject.h 第 1280 行定义.

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

- YObject.h
- YObject.cpp