YSTest: optional.h 文件参考

YSTest PreAlpha_b900_20201012 The YSLib Test Project

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

可选值包装类型。 更多...

`#include "placement.hpp"`
`#include "operators.hpp"`
`#include <initializer_list>`
`#include <stdexcept>`
`#include "functional.hpp"`
optional.h 的引用(Include)关系图:
此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

## 类

class | ystdex::cpp2017::optional< _type >
| 可选值对象包装。 更多...
class | ystdex::details::optional_base< _type, bool >
class | ystdex::details::optional_base< _type, true >
struct | ystdex::cpp2017::nullopt_t
| 无值状态指示。 更多...
class | ystdex::cpp2017::bad_optional_access
| 可选值操作失败异常。 更多...
class | ystdex::cpp2017::optional< _type >
| 可选值对象包装。 更多...
struct | ystdex::cpp2017::optional_last_value< _type >
| 合并可选值序列。 更多...
struct | ystdex::cpp2017::optional_last_value< void >
struct | std::hash< ystdex::optional< _type > >
| ystdex::optional 散列支持。 更多...

## 命名空间

| ystdex
| `<memory>` 特性测试宏。
| ystdex::cpp2017
| 取约束范围的值。
| ystdex::details
| std

## 类型定义

template<typename _type >
using | ystdex::optional_relop_t = enable_if_t< is_convertible< _type, bool >::value, bool >
| 保留可选的比较操作对象类型的比较操作结果类型。 更多...
template<typename _type , typename _tOther >
using | ystdex::details::converts_from_optional = or_< is_constructible< _type, const optional< _tOther > & >, is_constructible< _type, optional< _tOther > & >, is_constructible< _type, const optional< _tOther > >, is_constructible< _type, optional< _tOther > >, is_convertible< const optional< _tOther > &, _type >, is_convertible< optional< _tOther > &, _type >, is_convertible< const optional< _tOther > &&, _type >, is_convertible< optional< _tOther > &&, _type > >
template<typename _type , typename _tOther >
using | ystdex::details::assigns_from_optional = or_< is_assignable< _type &, const optional< _tOther > & >, is_assignable< _type &, optional< _tOther > & >, is_assignable< _type &, const optional< _tOther > && >, is_assignable< _type &, optional< _tOther > && > >

## 函数

template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator!= (const optional< _type > &x, const optional< _tOther > &y) -> optional_relop_t< decltype(std::declval< _type >() !=std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator< (const optional< _type > &x, const optional< _tOther > &y) -> optional_relop_t< decltype(std::declval< _type >()< std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator> (const optional< _type > &x, const optional< _tOther > &y) -> optional_relop_t< decltype(std::declval< _type >() > std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator<= (const optional< _type > &x, const optional< _tOther > &y) -> optional_relop_t< decltype(std::declval< _type >()<=std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator>= (const optional< _type > &x, const optional< _tOther > &y) -> optional_relop_t< decltype(std::declval< _type >() >=std::declval< _tOther >())>
template<typename _type >
bool | ystdex::cpp2017::operator== (const optional< _type > &x, nullopt_t)
template<typename _type >
bool | ystdex::cpp2017::operator< (const optional< _type > &, nullopt_t)
template<typename _type >
bool | ystdex::cpp2017::operator< (nullopt_t, const optional< _type > &y)
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator== (const optional< _type > &x, const _tOther &y) -> optional_relop_t< decltype(std::declval< _type >()==std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator== (const _tOther &x, const optional< _type > &y) -> optional_relop_t< decltype(std::declval< _tOther >()==std::declval< _type >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator!= (const optional< _type > &x, const _tOther &y) -> optional_relop_t< decltype(std::declval< _type >() !=std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator!= (const _tOther &x, const optional< _type > &y) -> optional_relop_t< decltype(std::declval< _tOther >() !=std::declval< _type >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator< (const optional< _type > &x, const _tOther &y) -> optional_relop_t< decltype(std::declval< _type >()< std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator< (const _tOther &x, const optional< _type > &y) -> optional_relop_t< decltype(std::declval< _tOther >()< std::declval< _type >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator> (const optional< _type > &x, const _tOther &y) -> optional_relop_t< decltype(std::declval< _type >() > std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator> (const _tOther &x, const optional< _type > &y) -> optional_relop_t< decltype(std::declval< _tOther >() > std::declval< _type >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator<= (const optional< _type > &x, const _tOther &y) -> optional_relop_t< decltype(std::declval< _type >()<=std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator<= (const _tOther &x, const optional< _type > &y) -> optional_relop_t< decltype(std::declval< _tOther >()<=std::declval< _type >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator>= (const optional< _type > &x, const _tOther &y) -> optional_relop_t< decltype(std::declval< _type >() >=std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | ystdex::cpp2017::operator>= (const _tOther &x, const optional< _type > &y) -> optional_relop_t< decltype(std::declval< _tOther >() >=std::declval< _type >())>
template<typename _type >
void | ystdex::cpp2017::swap (optional< _type > &x, optional< _type > &y)
template<typename _type , typename... _tParams>
optional< _type > | ystdex::cpp2017::make_optional (_tParams &&... args)
| 创建 optional 对象。 更多...
template<typename _type , typename _tOther , typename... _tParams>
optional< _type > | ystdex::cpp2017::make_optional (std::initializer_list< _tOther > il, _tParams &&... args)
template<typename _type , typename... _tParams>
optional< _type > | ystdex::cpp2017::make_optional_inplace (_tParams &&... args)
| 使用指定参数构造指定 optional 实例的值。 更多...
template<typename _type >
_type & | ystdex::cpp2017::ref_opt (optional< _type > &&o)
| 从 optional 实例的临时对象取左值引用。 更多...
template<typename _type >
_type & | ystdex::cpp2017::ref_opt ()

## 变量

const struct ystdex::cpp2017::nullopt_t | ystdex::cpp2017::nullptr

## 详细描述

可选值包装类型。

版本
  r1331

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

自从
  build 590

创建时间:
  2015-04-09 21:35:21 +0800

修改时间:
  2020-01-27 02:13 +0800

文本编码:
  UTF-8

模块名称:
  YStandardEx::Optonal

参见
  ISO C++17 [optional] 。
  WG21 N4606 20.6[optional] 。
  http://www.boost.org/doc/libs/1_57_0/libs/optional/doc/html/optional/reference.html 。

提供 ISO C++17 标准库头 <optional> 兼容的替代接口和实现。 除了部分关系操作使用 operators 实现而不保留命名空间内的声明外， 其它接口除命名空间成员扩展外，同 std::optional 。 注意因为一些兼容问题， std::experimental::optional 不被可选地使用， 即使在 placement.hpp 中仍然会被检查而使用其中的标签类型。 和 std::experimental::optional 有以下不同： LWG 2451 ：支持可选 explicit 的重载构造函数和赋值操作符。 LWG 2806 ：异常 bad_optional_access 的基类从 std::logic_error 修改为 std::exception 。 LWG 2857 ： optional 的成员函数模板 emplace 不返回值修改为返回新构造的引用。 （另见 LEWG 72 ：https://issues.isocpp.org/show_bug.cgi?id=72 。） WG21 N3765 ：支持不同的比较操作。 此外，限于核心语言特性的支持， LWG 2740 的解不被支持； 即 ystedex::operator-> 不总是提供和 ISO C++17 对 std::optional 相同的保证； 参见 ystdex::optional 成员 operator-> 的说明。

在文件 optional.h 中定义.