YSTest: Metafunctions

YSTest PreAlpha_b900_20201012 The YSLib Test Project

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

元函数。 更多...

Metafunctions 的协作图:

## 模块

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

## 命名空间

| ystdex::details

## 类

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

## 类型定义

template<class _tHandler , typename... _tParams>
using | ystdex::any_ops::is_handler_constructible_t = is_constructible< any_ops::any_manager, decltype(any_ops::construct< _tHandler >(std::declval< any_ops::any_storage & >(), std::declval< _tParams >()...))>
| 判断处理器是否能被指定参数构造。 更多...
template<typename _tSelected , typename _type = void>
using | ystdex::exclude_tag_t = enable_if_t< details::decayed_not_tag_t< _tSelected >::value, _type >
| 排除选择类型为标签的重载。 更多...
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<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 _tChar , typename _type = void>
using | ystdex::enable_if_irreplaceable_char_t = enable_if_t< nor_< is_trivially_replaceable< _tChar, char >, is_trivially_replaceable< _tChar, wchar_t > >::value, _type >
| 选择不和 char 或 wchar_t 可替换字符类类型的特定重载以避免冲突。 更多...
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<typename _type , typename _tRes = pseudo_output>
using | ystdex::nonvoid_result_t = cond_t< not_< is_void< _type > >, _type, pseudo_output >
| 若类型不是空类型则取后备结果类型（默认为 pseudo_output ）。 更多...
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 = indirect_t<_tParam&>, typename = increment_t<_tParam&>>
using | ystdex::enable_for_iterator_t = enable_if_t< details::iterator_reqirement_t< _tParam >::value, _type >
| 选择迭代器类型的特定重载避免和其它类型冲突。 更多...
template<class _tDeleter >
using | ystdex::deleter_member_pointer_t = typename remove_reference_t< _tDeleter >::pointer
| 取删除器的 `pointer` 成员类型。 更多...
template<class _type >
using | ystdex::_t = typename _type::type
| 嵌套类型别名。 更多...
template<typename _tCond , typename _tThen = true_, typename _tElse = false_>
using | ystdex::cond = conditional< _tCond::value, _tThen, _tElse >
| 条件判断。 更多...
template<typename... _types>
using | ystdex::wrap_mixin_t = mixin< classify_value_t< _types >... >
| 包装为混入类。 更多...
template<typename _type >
using | ystdex::optional_relop_t = enable_if_t< is_convertible< _type, bool >::value, bool >
| 保留可选的比较操作对象类型的比较操作结果类型。 更多...
template<typename _tRange >
using | ystdex::range_iterator_t = decltype(ystdex::begin(std::declval< _tRange & >()))
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 _type , typename _type2 >
using | ystdex_swap::dep_swap::swap_t = decltype(swap(std::declval< _type >(), std::declval< _type2 >()))
template<typename _type >
using | ystdex::underlying_cond_type_t = _t< cond_t< is_enum< _type >, vdefer< underlying_type_t, _type >, identity< _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<typename _type >
using | ystdex::classify_value_t = cond_t< std::is_class< _type >, _type, boxed_value< _type > >
| 包装非类类型为类类型。 更多...
template<class _tParser >
using | NPL::MemberParseResult = typename _tParser::ParseResult
| 成员 ParseResult 类型。 更多...
template<typename _fParse >
using | NPL::A1::GParsedValue = typename ParseResultOf< _fParse >::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<typename _tPointer >
using | HolderFromPointer = PointerHolder< typename PointerHolderTraits< _tPointer >::element_type, PointerHolderTraits< _tPointer > >
template<class _tPixel >
using | YSLib::Drawing::MaskTrait = typename _tPixel::traits_type

## 详细描述

元函数。

警告
  其中的类类型通常不使用对象，一般可被继承但非虚析构。

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

自从
  build 333

## 类型定义说明

## ◆ _t

template<class _type >

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

嵌套类型别名。

自从
  build 649

在文件 meta.hpp 第 45 行定义.

## ◆ classify_value_t

template<typename _type >

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

包装非类类型为类类型。

自从
  build 477

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

## ◆ common_array_t

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 的实例及类似类型透明。

参见
  WG21 N4315 。

自从
  build 562

参见
  common_nonvoid_t

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

## ◆ cond

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

using ystdex::cond = typedef conditional<_tCond::value, _tThen, _tElse>

条件判断。

参见
  conditional

自从
  build 846

在文件 meta.hpp 第 787 行定义.

## ◆ deleter_member_pointer_t

template<class _tDeleter >

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

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

自从
  build 671

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

## ◆ enable_for_iterator_t

template<typename _tParam , typename _type = void, typename = indirect_t<_tParam&>, typename = increment_t<_tParam&>>

using ystdex::enable_for_iterator_t = typedef enable_if_t<details::iterator_reqirement_t<_tParam>::value, _type>

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

注解
  约束的迭代器类型条件仅判断自增、间接操作（解引用）和（可选的）类别。

参见
  enable_if_t

自从
  build 483

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

## ◆ enable_for_string_class_t

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 第 1018 行定义.

## ◆ enable_if_irreplaceable_char_t

template<typename _tChar , typename _type = void>

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

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

自从
  build 630

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

## ◆ enable_if_replaceable_t

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 第 105 行定义.

## ◆ enable_if_transparent_t

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 第 74 行定义.

## ◆ exclude_tag_t

template<typename _tSelected , typename _type = void>

using ystdex::exclude_tag_t = typedef enable_if_t<details::decayed_not_tag_t<_tSelected>::value, _type>

排除选择类型为标签的重载。

自从
  build 864

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

## ◆ GParsedValue

template<typename _fParse >

using NPL::A1::GParsedValue = typedef typename ParseResultOf<_fParse>::value_type

解析结果元素类型。

自从
  build 891

在文件 NPLA1.h 第 1392 行定义.

## ◆ HolderFromPointer

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 第 1019 行定义.

## ◆ is_handler_constructible_t

template<class _tHandler , typename... _tParams>

using ystdex::any_ops::is_handler_constructible_t = typedef is_constructible<any_ops::any_manager, decltype(any_ops::construct<_tHandler>( std::declval<any_ops::any_storage&>(), std::declval<_tParams>()...))>

判断处理器是否能被指定参数构造。

参见
  construct

自从
  build 886

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

## ◆ is_piecewise_mapped

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 第 789 行定义.

## ◆ iterator_operators_t

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

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

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

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

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

自从
  build 576

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

## ◆ make_integer_sequence

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 第 301 行定义.

## ◆ MaskTrait

template<class _tPixel >

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

自从
  build 685

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

## ◆ MemberParseResult

template<class _tParser >

using NPL::MemberParseResult = typedef typename _tParser::ParseResult

成员 ParseResult 类型。

自从
  build 891

在文件 Lexical.h 第 430 行定义.

## ◆ nonvoid_result_t

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 。

在文件 invoke.hpp 第 100 行定义.

## ◆ optional_relop_t

template<typename _type >

using ystdex::optional_relop_t = typedef enable_if_t<is_convertible<_type, bool>::value, bool>

保留可选的比较操作对象类型的比较操作结果类型。

注解
  YBase optional 扩展。

自从
  build 831

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

## ◆ range_iterator_t

template<typename _tRange >

using ystdex::range_iterator_t = typedef decltype(ystdex::begin(std::declval<_tRange&>()))

自从
  build 899

在文件 range.hpp 第 667 行定义.

## ◆ swap_t

template<typename _type , typename _type2 >

using ystdex_swap::dep_swap::swap_t = typedef decltype(swap(std::declval<_type>(), std::declval<_type2>()))

自从
  build 845

在文件 swap.hpp 第 195 行定义.

## ◆ underlying_cond_type_t

template<typename _type >

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

取底层类型。

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

自从
  build 671

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

## ◆ unique_ptr_from

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 第 109 行定义.

## ◆ wrap_mixin_t

template<typename... _types>

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

包装为混入类。

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

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