YSTest: ystdex::cpp2017::optional< _type > 模板类 参考

YSTest PreAlpha_b900_20201012 The YSLib Test Project

Public 类型 | Public 成员函数 | Private 类型 | Private 成员函数 | 相关函数 | 所有成员列表
ystdex::cpp2017::optional< _type > 模板类 参考
YBase Replacement features

可选值对象包装。 更多...

`#include <optional.h>`

类 ystdex::cpp2017::optional< _type > 继承关系图:
[图例]

## Public 类型

using | value_type = _type

## Public 成员函数

| optional ()
| optional (nullopt_t)
template<typename _tOther = _type, enable_if_t< and_< not_< is_same< optional< _type >, decay_t< _tOther >>>, not_< is_same< in_place_t, decay_t< _tOther >>>, is_constructible< _type, _tOther >, is_convertible< _tOther &&, _type >>::value, bool > = true>
| optional (_tOther &&v)
template<typename _tOther = _type, enable_if_t< and_< not_< is_same< optional< _type >, decay_t< _tOther >>>, not_< is_same< in_place_t, decay_t< _tOther >>>, is_constructible< _type, _tOther >, not_< is_convertible< _tOther &&, _type >>>::value, bool > = false>
| optional (_tOther &&v)
template<typename _tOther , enable_if_t< and_< not_< is_same< _type, _tOther >>, is_constructible< _type, const _tOther & >, is_convertible< const _tOther &, _type >, not_< details::converts_from_optional< _type, _tOther >>>::value, bool > = true>
| optional (const optional< _tOther > &t)
template<typename _tOther , enable_if_t< and_< not_< is_same< _type, _tOther >>, is_constructible< _type, const _tOther & >, not_< is_convertible< const _tOther &, _type >>, not_< details::converts_from_optional< _type, _tOther >>>::value, bool > = false>
| optional (const optional< _tOther > &t)
template<typename _tOther , enable_if_t< and_< not_< is_same< _type, _tOther >>, is_constructible< _type, _tOther >, is_convertible< _tOther &&, _type >, not_< details::converts_from_optional< _type, _tOther >>>::value, bool > = true>
| optional (optional< _tOther > &&t)
template<typename _tOther , enable_if_t< and_< not_< is_same< _type, _tOther >>, is_constructible< _type, _tOther >, not_< is_convertible< _tOther &&, _type >>, not_< details::converts_from_optional< _type, _tOther >>>::value, bool > = false>
| optional (optional< _tOther > &&t)
template<typename... _tParams, typename = enable_if_t<is_constructible<_type, _tParams...>::value>>
| optional (in_place_t, _tParams &&... args)
template<typename _tOther , typename... _tParams, typename = enable_if_t<is_constructible<_type, std::initializer_list<_tOther>&, _tParams&&...>::value>>
| optional (in_place_t, std::initializer_list< _tOther > il, _tParams &&... args)
| optional (const optional &)=default
| optional (optional &&o)
| ~optional ()=default
optional & | operator= (nullopt_t)
optional & | operator= (const optional &o)
optional & | operator= (optional &&o)
template<typename _tOther = _type>
enable_if_t< and_< not_< is_same< optional< _type >, decay_t< _tOther > > >, is_constructible< _type, _tOther >, nand_< is_scalar< _type >, is_same< _type, decay_t< _tOther > > >, is_assignable< _type &, _tOther > >::value, optional & > | operator= (_tOther &&v)
template<typename _tOther >
enable_if_t< and_< not_< is_same< _type, _tOther > >, is_constructible< _type, const _tOther & >, is_assignable< _type &, _tOther >, not_< details::converts_from_optional< _type, _tOther > >, not_< details::assigns_from_optional< _type, _tOther > > >::value, optional & > | operator= (const optional< _tOther > &u)
template<typename _tOther >
enable_if_t< and_< not_< is_same< _type, _tOther > >, is_constructible< _type, _tOther >, is_assignable< _type &, _tOther >, not_< details::converts_from_optional< _type, _tOther > >, not_< details::assigns_from_optional< _type, _tOther > > >::value, optional & > | operator= (optional< _tOther > &&u)
template<typename... _tParams>
_type & | emplace (_tParams &&... args)
template<typename _tOther , typename... _tParams>
_type & | emplace (std::initializer_list< _tOther > il, _tParams &&... args)
void | swap (optional &o)
_type * | operator-> ()
const _type * | operator-> () const
_type & | operator* () &
const _type & | operator* () const &
_type && | operator* () &&
const _type && | operator* () const &&
| operator bool () const
_type & | value () &
const _type & | value () const &
_type && | value () &&
_type && | value () const &&
template<typename _tOther >
_type | value_or (_tOther &&other) const &
template<typename _tOther >
_type | value_or (_tOther &&other) &&

## Private 类型

using | base = details::optional_base< _type >

## Private 成员函数

base & | get_base ()
const base & | get_base () const

## 相关函数

(请注意: 这些不是成员函数.)
template<typename _type , typename _tOther >
auto | operator== (const optional< _type > &x, const optional< _tOther > &y) -> optional_relop_t< decltype(std::declval< _type >()==std::declval< _tOther >())>
| 关系和比较操作。 更多...

## 详细描述

### template<typename _type>
class ystdex::cpp2017::optional< _type >

可选值对象包装。

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

警告
  非虚析构。

参见
  WG21 N4606 20.6.3[optional.object] 。

待办事项:

  allocator_arg 支持。

  符合 WG21 N4700 要求的 explicit 重载。

在文件 optional.h 第 81 行定义.

## 成员类型定义说明

## ◆ base

template<typename _type >

using ystdex::cpp2017::optional< _type >::base = details::optional_base<_type>

private

在文件 optional.h 第 366 行定义.

## ◆ value_type

template<typename _type >

using ystdex::cpp2017::optional< _type >::value_type = _type

参见
  WG21 N4606 20.6.2[optional.synopsis]/1 。
  WG21 N4606 20.6.3[optional.object]/3 。

在文件 optional.h 第 363 行定义.

## 构造及析构函数说明

## ◆ optional() [1/12]

template<typename _type >

ystdex::cpp2017::optional< _type >::optional | ( |  | ) |

inline

在文件 optional.h 第 370 行定义.

## ◆ optional() [2/12]

template<typename _type >

ystdex::cpp2017::optional< _type >::optional | ( | nullopt_t |  | ) |

inline

在文件 optional.h 第 373 行定义.

## ◆ optional() [3/12]

template<typename _type >
template<typename _tOther = _type, enable_if_t< and_< not_< is_same< optional< _type >, decay_t< _tOther >>>, not_< is_same< in_place_t, decay_t< _tOther >>>, is_constructible< _type, _tOther >, is_convertible< _tOther &&, _type >>::value, bool > = true>

ystdex::cpp2017::optional< _type >::optional | ( | _tOther && | v | ) |

inline

自从
  build 831

参见
  LWG 2756 。

在文件 optional.h 第 385 行定义.

## ◆ optional() [4/12]

template<typename _type >
template<typename _tOther = _type, enable_if_t< and_< not_< is_same< optional< _type >, decay_t< _tOther >>>, not_< is_same< in_place_t, decay_t< _tOther >>>, is_constructible< _type, _tOther >, not_< is_convertible< _tOther &&, _type >>>::value, bool > = false>

ystdex::cpp2017::optional< _type >::optional | ( | _tOther && | v | ) |

inlineexplicit

在文件 optional.h 第 393 行定义.

## ◆ optional() [5/12]

template<typename _type >
template<typename _tOther , enable_if_t< and_< not_< is_same< _type, _tOther >>, is_constructible< _type, const _tOther & >, is_convertible< const _tOther &, _type >, not_< details::converts_from_optional< _type, _tOther >>>::value, bool > = true>

ystdex::cpp2017::optional< _type >::optional | ( | const optional< _tOther > & | t | ) |

inline

在文件 optional.h 第 401 行定义.

## ◆ optional() [6/12]

template<typename _type >
template<typename _tOther , enable_if_t< and_< not_< is_same< _type, _tOther >>, is_constructible< _type, const _tOther & >, not_< is_convertible< const _tOther &, _type >>, not_< details::converts_from_optional< _type, _tOther >>>::value, bool > = false>

ystdex::cpp2017::optional< _type >::optional | ( | const optional< _tOther > & | t | ) |

inlineexplicit

在文件 optional.h 第 413 行定义.

## ◆ optional() [7/12]

template<typename _type >
template<typename _tOther , enable_if_t< and_< not_< is_same< _type, _tOther >>, is_constructible< _type, _tOther >, is_convertible< _tOther &&, _type >, not_< details::converts_from_optional< _type, _tOther >>>::value, bool > = true>

ystdex::cpp2017::optional< _type >::optional | ( | optional< _tOther > && | t | ) |

inline

在文件 optional.h 第 424 行定义.

## ◆ optional() [8/12]

template<typename _type >
template<typename _tOther , enable_if_t< and_< not_< is_same< _type, _tOther >>, is_constructible< _type, _tOther >, not_< is_convertible< _tOther &&, _type >>, not_< details::converts_from_optional< _type, _tOther >>>::value, bool > = false>

ystdex::cpp2017::optional< _type >::optional | ( | optional< _tOther > && | t | ) |

inlineexplicit

在文件 optional.h 第 435 行定义.

## ◆ optional() [9/12]

template<typename _type >
template<typename... _tParams, typename = enable_if_t<is_constructible<_type, _tParams...>::value>>

ystdex::cpp2017::optional< _type >::optional | ( | in_place_t | ,
|  | _tParams &&... | args
| ) |  |

inlineexplicit

在文件 optional.h 第 445 行定义.

## ◆ optional() [10/12]

template<typename _type >
template<typename _tOther , typename... _tParams, typename = enable_if_t<is_constructible<_type, std::initializer_list<_tOther>&, _tParams&&...>::value>>

ystdex::cpp2017::optional< _type >::optional | ( | in_place_t | ,
|  | std::initializer_list< _tOther > | il,
|  | _tParams &&... | args
| ) |  |

inlineexplicit

在文件 optional.h 第 452 行定义.

## ◆ optional() [11/12]

template<typename _type >

ystdex::cpp2017::optional< _type >::optional | ( | const optional< _type > & |  | ) |

inlinedefault

## ◆ optional() [12/12]

template<typename _type >

ystdex::cpp2017::optional< _type >::optional | ( | optional< _type > && | o | ) |

inline

在文件 optional.h 第 458 行定义.

## ◆ ~optional()

template<typename _type >

ystdex::cpp2017::optional< _type >::~optional | ( |  | ) |

default

## 成员函数说明

## ◆ emplace() [1/2]

template<typename _type >
template<typename... _tParams>

_type& ystdex::cpp2017::optional< _type >::emplace | ( | _tParams &&... | args | ) |

inline

自从
  build 831

参见
  LWG 2857 。

在文件 optional.h 第 545 行定义.

## ◆ emplace() [2/2]

template<typename _type >
template<typename _tOther , typename... _tParams>

_type& ystdex::cpp2017::optional< _type >::emplace | ( | std::initializer_list< _tOther > | il,
|  | _tParams &&... | args
| ) |  |

inline

在文件 optional.h 第 553 行定义.

## ◆ get_base() [1/2]

template<typename _type >

base& ystdex::cpp2017::optional< _type >::get_base | ( |  | ) |

inlineprivate

在文件 optional.h 第 563 行定义.

被这些函数引用 ystdex::cpp2017::optional< _tNodeAlloc >::operator=().

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

## ◆ get_base() [2/2]

template<typename _type >

const base& ystdex::cpp2017::optional< _type >::get_base | ( |  | ) | const

inlineprivate

在文件 optional.h 第 568 行定义.

## ◆ operator bool()

template<typename _type >

ystdex::cpp2017::optional< _type >::operator bool | ( |  | ) | const

inlineexplicit

在文件 optional.h 第 633 行定义.

## ◆ operator*() [1/4]

template<typename _type >

_type& ystdex::cpp2017::optional< _type >::operator* | ( |  | ) | &

inline

在文件 optional.h 第 610 行定义.

## ◆ operator*() [2/4]

template<typename _type >

_type&& ystdex::cpp2017::optional< _type >::operator* | ( |  | ) | &&

inline

自从
  build 675

在文件 optional.h 第 621 行定义.

## ◆ operator*() [3/4]

template<typename _type >

const _type& ystdex::cpp2017::optional< _type >::operator* | ( |  | ) | const &

inline

在文件 optional.h 第 615 行定义.

## ◆ operator*() [4/4]

template<typename _type >

const _type&& ystdex::cpp2017::optional< _type >::operator* | ( |  | ) | const &&

inline

自从
  build 834

在文件 optional.h 第 627 行定义.

## ◆ operator->() [1/2]

template<typename _type >

_type* ystdex::cpp2017::optional< _type >::operator-> | ( |  | ) |

inline

警告
  ISO C++17 前不保证常量表达式要求。

参见
  LWG 2740 。

在文件 optional.h 第 598 行定义.

## ◆ operator->() [2/2]

template<typename _type >

const _type* ystdex::cpp2017::optional< _type >::operator-> | ( |  | ) | const

inline

在文件 optional.h 第 603 行定义.

## ◆ operator=() [1/6]

template<typename _type >
template<typename _tOther = _type>

enable_if_t<and_<not_<is_same<optional<_type>, decay_t<_tOther> > >, is_constructible<_type, _tOther>, nand_<is_scalar<_type>, is_same<_type, decay_t<_tOther> > >, is_assignable<_type&, _tOther> >::value, optional&> ystdex::cpp2017::optional< _type >::operator= | ( | _tOther && | v | ) |

inline

参见
  LWG 2756 。

自从
  build 831

在文件 optional.h 第 492 行定义.

## ◆ operator=() [2/6]

template<typename _type >

optional& ystdex::cpp2017::optional< _type >::operator= | ( | const optional< _type > & | o | ) |

inline

在文件 optional.h 第 470 行定义.

## ◆ operator=() [3/6]

template<typename _type >
template<typename _tOther >

enable_if_t<and_<not_<is_same<_type, _tOther> >, is_constructible<_type, const _tOther&>, is_assignable<_type&, _tOther>, not_<details::converts_from_optional<_type, _tOther> >, not_<details::assigns_from_optional<_type, _tOther> > >::value, optional&> ystdex::cpp2017::optional< _type >::operator= | ( | const optional< _tOther > & | u | ) |

inline

在文件 optional.h 第 505 行定义.

## ◆ operator=() [4/6]

template<typename _type >

optional& ystdex::cpp2017::optional< _type >::operator= | ( | nullopt_t |  | ) |

inline

在文件 optional.h 第 464 行定义.

## ◆ operator=() [5/6]

template<typename _type >

optional& ystdex::cpp2017::optional< _type >::operator= | ( | optional< _type > && | o | ) |

inline

自从
  build 630

在文件 optional.h 第 477 行定义.

## ◆ operator=() [6/6]

template<typename _type >
template<typename _tOther >

enable_if_t<and_<not_<is_same<_type, _tOther> >, is_constructible<_type, _tOther>, is_assignable<_type&, _tOther>, not_<details::converts_from_optional< _type, _tOther> >, not_<details::assigns_from_optional<_type, _tOther> > >::value, optional&> ystdex::cpp2017::optional< _type >::operator= | ( | optional< _tOther > && | u | ) |

inline

在文件 optional.h 第 523 行定义.

## ◆ swap()

template<typename _type >

void ystdex::cpp2017::optional< _type >::swap | ( | optional< _type > & | o | ) |

inline

在文件 optional.h 第 575 行定义.

被这些函数引用 ystdex::details::node_handle_base< _type, _tNodeAlloc >::swap_base().

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

## ◆ value() [1/4]

template<typename _type >

_type& ystdex::cpp2017::optional< _type >::value | ( |  | ) | &

inline

在文件 optional.h 第 642 行定义.

## ◆ value() [2/4]

template<typename _type >

_type&& ystdex::cpp2017::optional< _type >::value | ( |  | ) | &&

inline

自从
  build 675

在文件 optional.h 第 655 行定义.

## ◆ value() [3/4]

template<typename _type >

const _type& ystdex::cpp2017::optional< _type >::value | ( |  | ) | const &

inline

在文件 optional.h 第 648 行定义.

## ◆ value() [4/4]

template<typename _type >

_type&& ystdex::cpp2017::optional< _type >::value | ( |  | ) | const &&

inline

自从
  build 675

在文件 optional.h 第 662 行定义.

## ◆ value_or() [1/2]

template<typename _type >
template<typename _tOther >

_type ystdex::cpp2017::optional< _type >::value_or | ( | _tOther && | other | ) | &&

inline

在文件 optional.h 第 678 行定义.

## ◆ value_or() [2/2]

template<typename _type >
template<typename _tOther >

_type ystdex::cpp2017::optional< _type >::value_or | ( | _tOther && | other | ) | const &

inline

在文件 optional.h 第 670 行定义.

## 友元及相关函数文档

## ◆ operator==()

template<typename _type , typename _tOther >

auto operator== | ( | const optional< _type > & | x,
|  | const optional< _tOther > & | y
| ) |  | -> optional_relop_t<decltype( std::declval<_type>() == std::declval<_tOther>())>

related

关系和比较操作。

自从
  build 831

参见
  ISO C++17 [optional.relops] 。

在文件 optional.h 第 701 行定义.

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

- optional.h