YSTest: Metafunctions

YSTest PreAlpha_b800_20170810 The YSLib Test Project

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

模块 | 命名空间 | 类 | 类型定义
Metafunctions
Template Meta Programing » Meta Operations

元函数。 更多...

Metafunctions 的协作图:

## 模块

| Type Traits Operations
| 类型特征操作。
| Metafunction Compositions
| 元函数组合操作。

## 命名空间

| ystdex::details

## 类

struct | ystdex::modular_arithmetic< _type >
| 模算术特性：取得不超过模值的最大值。 更多...
struct | ystdex::make_parameter_tuple< typename >
| 取参数列表元组。 更多...
struct | ystdex::return_of< typename >
| 取返回类型。 更多...
struct | ystdex::parameter_of< _vIdx, _fCallable >
| 取指定索引的参数类型。 更多...
struct | ystdex::paramlist_size< _fCallable >
| 取参数列表大小。 更多...
struct | ystdex::make_function_type< typename, class >
| 取指定返回类型和元组指定参数类型的函数类型。 更多...
struct | ystdex::make_successor< _tInt, _tInt, class >
| 取整数序列的自然数后继。 更多...
struct | ystdex::nested_allocator< _type, _tDefault >
| 取嵌套成员分配器类型，若不存在则使用第二模板参数指定的默认类型。 更多...
struct | ystdex::tuple_find< typename, class >
| 查找类型对应的索引位置，若不存在则为 tuple_not_found 。 更多...
struct | ystdex::min_<... >
| 算术操作元函数。 更多...
struct | ystdex::and_<... >
| 逻辑操作元函数。 更多...
struct | ystdex::always< _type >::impl<... >
struct | ystdex::always< _type >
| 表达式 SFINAE 别名模板。 更多...
struct | ystdex::details::detector< _tDefault, typename, class,... >
struct | ystdex::details::detector< _tDefault, void_t< _gOp< _tParams... > >, _gOp, _tParams... >
struct | ystdex::are_same< _type, _types >
| 判断第一个参数和之后的参数指定的类型相同。 更多...
struct | CHRLib::MapFixedEncoding< _tChar >
| 取指定字符类型对应的默认定长编码。 更多...
struct | CHRLib::CharSet::EncodingTraits< Encoding >
| 取编码对应的字符类型。 更多...

## 类型定义

template<class _tAssocCon , typename _tKey , typename... _tParams>
using | ystdex::is_piecewise_mapped = is_constructible< typename _tAssocCon::value_type, std::piecewise_construct_t, std::tuple< _tKey && >, std::tuple< _tParams &&... >>
| 判断关联容器、键和参数类型是否可以按 map 的方式无转移地构造。 更多...
template<typename _tIter , typename _tTraits = std::iterator_traits<_tIter>>
using | ystdex::iterator_operators_t = _t< details::iterator_operators< _tIter, _tTraits >>
| 按迭代器类别取可实现迭代器的重载操作符集合的实现。 更多...
template<typename _tParam , typename _type = void, typename = std::pair< indirect_t<_tParam&>, decltype(++std::declval<_tParam&>())>>
using | ystdex::enable_for_iterator_t = enable_if_t< is_same< decltype(++std::declval< _tParam & >()), _tParam & >::value, _type >
| 选择迭代器类型的特定重载避免和其它类型冲突。 更多...
template<typename _tParam , typename _type = void>
using | ystdex::enable_for_string_class_t = enable_if_t< is_string_class< decay_t< _tParam >>::value, _type >
| 选择字符串类类型的特定重载避免和其它非字符串类型冲突。 更多...
template<typename _tSrc , typename _tDst , typename _type = void>
using | ystdex::enable_if_replaceable_t = enable_if_t< is_trivially_replaceable< _tSrc, _tDst >::value, _type >
| 选择和特定类型可替换字符类类型的特定重载以避免冲突。 更多...
template<class _type >
using | ystdex::_t = typename _type::type
| 嵌套类型别名。 更多...
template<typename _type >
using | ystdex::classify_value_t = cond_t< std::is_class< _type >, _type, boxed_value< _type >>
| 包装非类类型为类类型。 更多...
template<class _tDeleter , typename _tDefault = void>
using | platform::references::unique_ptr_from = unique_ptr< ystdex::defer_element< ystdex::unique_ptr_pointer< void, _tDeleter >, _tDefault >, _tDeleter >
| 取删除器对应的 unique_ptr 实例。 更多...
template<class _tPixel >
using | YSLib::Drawing::MaskTrait = typename _tPixel::Traits
template<typename _type = void, typename... _tParams>
using | ystdex::common_array_t = std::array< common_nonvoid_t< _type, decay_t< _tParams >... >, sizeof...(_tParams)>
| 取指定类型和参数类型推断的 `std::array` 实例。 更多...
template<typename _type = void, typename... _tParams>
common_array_t< _type, _tParams... > | ystdex::cast_array (_tParams &&...args)
| 构造指定参数转换初始化的 `std::array` 对象。 更多...
template<typename _type = void, typename... _tParams>
common_array_t< _type, _tParams... > | ystdex::forward_as_array (_tParams &&...args)
| 转移指定参数至 `std::array` 对象。 更多...
template<typename _type = void, typename... _tParams>
common_array_t< _type, _tParams... > | ystdex::make_array (_tParams &&...args)
| 构造指定参数初始化的 `std::array` 对象。 更多...
template<typename _tChar , typename _type = void>
using | ystdex::enable_if_irreplaceable_char_t = enable_if_t< not_< or_< is_trivially_replaceable< _tChar, char >, is_trivially_replaceable< _tChar, wchar_t >>>::value, _type >
| 选择不和 char 或 wchar_t 可替换字符类类型的特定重载以避免冲突。 更多...
using | ystdex::uchar_t = cond_t< is_trivially_replaceable< wchar_t, char16_t >, char16_t, cond_t< is_trivially_replaceable< wchar_t, char32_t >, char32_t, void >>
| 指定和 `wchar_t` 互相替换存储的非 `char` 内建字符类型。 更多...
template<typename _fComp , typename _tDummy , typename _type = void>
using | ystdex::enable_if_transparent_t = enable_if_t< has_mem_is_transparent< _fComp, _tDummy >::value, _type >
| 移除不满足包含 is_transparent 成员类型比较器的重载。 更多...
template<typename _tInt , size_t _vN>
using | ystdex::cpp2014::make_integer_sequence = make_natural_sequence_t< _tInt, _vN >
template<size_t _vN>
using | ystdex::cpp2014::make_index_sequence = make_integer_sequence< size_t, _vN >
template<typename... _types>
using | ystdex::cpp2014::index_sequence_for = make_index_sequence< sizeof...(_types)>
template<class _tDeleter >
using | ystdex::deleter_member_pointer_t = typename remove_reference_t< _tDeleter >::pointer
| 取删除器的 `pointer` 成员类型。 更多...
template<typename _type , class _tDeleter >
using | ystdex::unique_ptr_pointer = detected_or_t< _type *, deleter_member_pointer_t, _tDeleter >
| 取 unique_ptr 包装的指针类型。 更多...
template<typename _tPointer , typename _tDefault = void>
using | ystdex::defer_element = cond_or< not_< is_void< remove_pointer_t< _tPointer >>>, _tDefault, indirect_element_t, _tPointer >
| 取指针对应的元素类型。 更多...
template<typename... _types>
using | ystdex::wrap_mixin_t = mixin< classify_value_t< _types >... >
| 包装为混入类。 更多...
template<typename _type , typename _tRes = pseudo_output>
using | ystdex::nonvoid_result_t = cond_t< not_< is_void< _type >>, _type, pseudo_output >
| 若类型不是空类型则取后备结果类型（默认为 pseudo_output ）。 更多...
template<typename _type , typename _tRes = pseudo_output>
using | ystdex::object_result_t = cond_t< is_object< _type >, _type, pseudo_output >
| 若类型不是对象类型则取后备结果类型（默认为 pseudo_output ）。 更多...
template<typename _type >
using | ystdex::underlying_cond_type_t = cond_t< is_enum< _type >, vdefer< underlying_type_t, _type >, _type >
| 取底层类型。 更多...
template<class _tCond , typename _tDefault , template< typename... > class _gOp, typename... _tParams>
using | ystdex::cond_or = cond_t< _tCond, vdefer< _gOp, _tParams... >, _tDefault >
| 条件判断，若失败使用默认类型。 更多...
template<class _tCond , typename _tDefault , template< typename... > class _gOp, typename... _tParams>
using | ystdex::cond_or_t = _t< cond_or< _tCond, identity< _tDefault >, _gOp, _tParams... >>
template<typename _tCond , typename _tThen = true_, typename _tElse = false_>
using | ystdex::cond_t = conditional_t< _tCond::value, _tThen, _tElse >
| 条件判断。 更多...
template<class _tClass , typename _tParam , typename _type = void>
using | ystdex::exclude_self_t = enable_if_t<!is_same< _tClass &, decay_t< _tParam > & >::value, _type >
| 移除选择类类型的特定重载避免构造模板和复制/转移特殊成员函数冲突。 更多...
template<typename _tPointer >
using | HolderFromPointer = PointerHolder< typename PointerHolderTraits< _tPointer >::element_type, PointerHolderTraits< _tPointer >>

## 详细描述

元函数。

警告
  以类模板实现的作为元函数的公开接口一般可被继承但非虚析构。

参见
  http://www.boost.org/doc/libs/1_50_0/libs/mpl/doc/refmanual/metafunction.html 。

自从
  build 333

## 类型定义说明

template<class _type >

using ystdex::_t = typedef typename _type::type

嵌套类型别名。

自从
  build 649

在文件 type_traits.hpp 第 97 行定义.

template<typename _type >

using ystdex::classify_value_t = typedef cond_t<std::is_class<_type>, _type, boxed_value<_type>>

包装非类类型为类类型。

自从
  build 477

在文件 utility.hpp 第 312 行定义.

template<typename _type = void, typename... _tParams>

using ystdex::common_array_t = typedef std::array<common_nonvoid_t<_type, decay_t<_tParams>...>, sizeof...(_tParams)>

取指定类型和参数类型推断的 `std::array` 实例。

注解
  为避免复杂性，对 `std::reference_wrapper` 的实例及类似类型透明。

参见
  http://open-std.org/JTC1/SC22/WG21/docs/papers/2014/n4315.html

自从
  build 562

在文件 array.hpp 第 52 行定义.

template<class _tCond , typename _tDefault , template< typename... > class _gOp, typename... _tParams>

using ystdex::cond_or = typedef cond_t<_tCond, vdefer<_gOp, _tParams...>, _tDefault>

条件判断，若失败使用默认类型。

自从
  build 723

参见
  detected_or
  detected_or_t

在文件 type_op.hpp 第 319 行定义.

template<class _tCond , typename _tDefault , template< typename... > class _gOp, typename... _tParams>

using ystdex::cond_or_t = typedef _t<cond_or<_tCond, identity<_tDefault>, _gOp, _tParams...>>

在文件 type_op.hpp 第 323 行定义.

template<typename _tCond , typename _tThen = true_, typename _tElse = false_>

using ystdex::cond_t = typedef conditional_t<_tCond::value, _tThen, _tElse>

条件判断。

参见
  conditional_t

自从
  build 730

在文件 type_traits.hpp 第 738 行定义.

template<typename _tPointer , typename _tDefault = void>

using ystdex::defer_element = typedef cond_or<not_<is_void<remove_pointer_t<_tPointer>>>, _tDefault, indirect_element_t, _tPointer>

取指针对应的元素类型。

当指针为空指针时为 `void` ，否则间接操作的元素类型。

在文件 memory.hpp 第 533 行定义.

template<class _tDeleter >

using ystdex::deleter_member_pointer_t = typedef typename remove_reference_t<_tDeleter>::pointer

取删除器的 `pointer` 成员类型。

自从
  build 671

在文件 memory.hpp 第 519 行定义.

template<typename _tParam , typename _type = void, typename = std::pair< indirect_t<_tParam&>, decltype(++std::declval<_tParam&>())>>

using ystdex::enable_for_iterator_t = typedef enable_if_t< is_same<decltype(++std::declval<_tParam&>()), _tParam&>::value, _type>

选择迭代器类型的特定重载避免和其它类型冲突。

参见
  enable_if_t

自从
  build 483

在文件 iterator_trait.hpp 第 57 行定义.

template<typename _tParam , typename _type = void>

using ystdex::enable_for_string_class_t = typedef enable_if_t<is_string_class<decay_t<_tParam>>::value, _type>

选择字符串类类型的特定重载避免和其它非字符串类型冲突。

参见
  enable_if_t

自从
  build 620

在文件 string.hpp 第 274 行定义.

template<typename _tChar , typename _type = void>

using ystdex::enable_if_irreplaceable_char_t = typedef enable_if_t<not_<or_< is_trivially_replaceable<_tChar, char>, is_trivially_replaceable<_tChar, wchar_t>>>::value, _type>

选择不和 char 或 wchar_t 可替换字符类类型的特定重载以避免冲突。

自从
  build 630

在文件 cstring.h 第 109 行定义.

template<typename _tSrc , typename _tDst , typename _type = void>

using ystdex::enable_if_replaceable_t = typedef enable_if_t<is_trivially_replaceable<_tSrc, _tDst>::value, _type>

选择和特定类型可替换字符类类型的特定重载以避免冲突。

自从
  build 630

在文件 type_pun.hpp 第 106 行定义.

template<typename _fComp , typename _tDummy , typename _type = void>

using ystdex::enable_if_transparent_t = typedef enable_if_t<has_mem_is_transparent<_fComp, _tDummy>::value, _type>

移除不满足包含 is_transparent 成员类型比较器的重载。

参见
  enable_if_t
  has_mem_is_transparent
  WG21 N3657 。

自从
  build 679

在文件 functor.hpp 第 86 行定义.

template<class _tClass , typename _tParam , typename _type = void>

using ystdex::exclude_self_t = typedef enable_if_t<!is_same<_tClass&, decay_t<_tParam>&>::value, _type>

移除选择类类型的特定重载避免构造模板和复制/转移特殊成员函数冲突。

前置条件
  第一参数为类类型。

参见
  enable_if_t

自从
  build 687

在文件 type_traits.hpp 第 748 行定义.

template<typename _type , class _tTraits = PointerHolderTraits<unique_ptr<_type>>>
template<typename _tPointer >

using HolderFromPointer = PointerHolder<typename PointerHolderTraits< _tPointer>::element_type, PointerHolderTraits<_tPointer>>

related

自从
  build 793

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

template<typename... _types>

using ystdex::cpp2014::index_sequence_for = typedef make_index_sequence<sizeof...(_types)>

在文件 integer_sequence.hpp 第 306 行定义.

template<class _tAssocCon , typename _tKey , typename... _tParams>

using ystdex::is_piecewise_mapped = typedef is_constructible<typename _tAssocCon::value_type, std::piecewise_construct_t, std::tuple<_tKey&&>, std::tuple<_tParams&&...>>

判断关联容器、键和参数类型是否可以按 map 的方式无转移地构造。

自从
  build 681

在文件 container.hpp 第 983 行定义.

template<typename _tIter , typename _tTraits = std::iterator_traits<_tIter>>

using ystdex::iterator_operators_t = typedef _t<details::iterator_operators<_tIter, _tTraits>>

按迭代器类别取可实现迭代器的重载操作符集合的实现。

注解
  仅使用第二参数的特定成员，可以是兼容 std::iterator 的实例的类型。

警告
  实例作为实现迭代器的基类时不应使用默认参数，因为此时无法访问成员类型。

自从
  build 576

在文件 iterator_op.hpp 第 191 行定义.

template<size_t _vN>

using ystdex::cpp2014::make_index_sequence = typedef make_integer_sequence<size_t, _vN>

在文件 integer_sequence.hpp 第 302 行定义.

template<typename _tInt , size_t _vN>

using ystdex::cpp2014::make_integer_sequence = typedef make_natural_sequence_t<_tInt, _vN>

参见
  ISO C++14 20.5 [intseq] 。

自从
  build 589

在文件 integer_sequence.hpp 第 299 行定义.

template<class _tPixel >

using YSLib::Drawing::MaskTrait = typedef typename _tPixel::Traits

自从
  build 685

在文件 YPixel.h 第 53 行定义.

template<typename _type , typename _tRes = pseudo_output>

using ystdex::nonvoid_result_t = typedef cond_t<not_<is_void<_type>>, _type, pseudo_output>

若类型不是空类型则取后备结果类型（默认为 pseudo_output ）。

自从
  build 636

参见
  关于相关的核心语言特性： WG21 P0146R0 。

在文件 ref.hpp 第 341 行定义.

template<typename _type , typename _tRes = pseudo_output>

using ystdex::object_result_t = typedef cond_t<is_object<_type>, _type, pseudo_output>

若类型不是对象类型则取后备结果类型（默认为 pseudo_output ）。

在文件 ref.hpp 第 345 行定义.

using ystdex::uchar_t = typedef cond_t<is_trivially_replaceable<wchar_t, char16_t>, char16_t, cond_t<is_trivially_replaceable<wchar_t, char32_t>, char32_t, void>>

指定和 `wchar_t` 互相替换存储的非 `char` 内建字符类型。

警告
  不同类型的非空字符的值是否可以替换取决于实现定义。

注解
  若存在这样的类型，为 `char16_t` 或 `char32_t` 之一，否则为 `void` 。

在文件 cstring.h 第 118 行定义.

template<typename _type >

using ystdex::underlying_cond_type_t = typedef cond_t<is_enum<_type>, vdefer<underlying_type_t, _type>, _type>

取底层类型。

注解
  同 underlying_type_t ，但对非枚举类型结果为参数类型。

自从
  build 671

在文件 type_op.hpp 第 308 行定义.

template<class _tDeleter , typename _tDefault = void>

using platform::references::unique_ptr_from = typedef unique_ptr<ystdex::defer_element< ystdex::unique_ptr_pointer<void, _tDeleter>, _tDefault>, _tDeleter>

取删除器对应的 unique_ptr 实例。

参见
  ystdex::defer_element
  ystdex::unique_ptr_pointer

自从
  build 671

元素类型通过 unique_ptr_pointer 按指定的删除器推断，若失败则为第二参数。

在文件 Reference.h 第 99 行定义.

template<typename _type , class _tDeleter >

using ystdex::unique_ptr_pointer = typedef detected_or_t<_type*, deleter_member_pointer_t, _tDeleter>

取 unique_ptr 包装的指针类型。

在文件 memory.hpp 第 524 行定义.

template<typename... _types>

using ystdex::wrap_mixin_t = typedef mixin<classify_value_t<_types>...>

包装为混入类。

注解
  使用 classify_value_t 对非类类型包装为 boxed_value 实例。

在文件 mixin.hpp 第 124 行定义.

## 函数说明

template<typename _type = void, typename... _tParams>

common_array_t<_type, _tParams...> ystdex::cast_array | ( | _tParams &&... | args | ) |

inline

构造指定参数转换初始化的 `std::array` 对象。

在文件 array.hpp 第 58 行定义.

参考 CHRLib::args , 以及 ystdex::decay_copy().

函数调用图:
template<typename _type = void, typename... _tParams>

common_array_t<_type, _tParams...> ystdex::forward_as_array | ( | _tParams &&... | args | ) |

inline

转移指定参数至 `std::array` 对象。

在文件 array.hpp 第 66 行定义.

参考 CHRLib::args , 以及 yforward.

template<typename _type = void, typename... _tParams>

common_array_t<_type, _tParams...> ystdex::make_array | ( | _tParams &&... | args | ) |

inline

构造指定参数初始化的 `std::array` 对象。

在文件 array.hpp 第 74 行定义.

参考 CHRLib::args , 以及 ystdex::decay_copy().

函数调用图: