YSTest: functional.hpp 文件参考

YSTest PreAlpha_b800_20170810 The YSLib Test Project

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

- 文件列表
- 文件成员

类 | 命名空间 | 类型定义 | 函数
functional.hpp 文件参考
YBaseLib » YStandardExtend

函数和可调用对象。 更多...

`#include "type_op.hpp"`
`#include "functor.hpp"`
`#include "cassert.h"`
`#include <numeric>`
functional.hpp 的引用(Include)关系图:
此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

## 类

struct | ystdex::details::tuple_element_convertible< class, class, class >
struct | ystdex::details::tuple_element_convertible< _type1, _type2, index_sequence<> >
struct | ystdex::details::tuple_element_convertible< std::tuple< _types1... >, std::tuple< _types2... >, index_sequence< _vHead, _vSeq... > >
struct | ystdex::is_covariant< _tFrom, _tTo >
| 判断指定类型之间是否协变。 更多...
struct | ystdex::is_covariant< _tFrom(_tFromParams...), _tTo(_tToParams...)>
struct | ystdex::is_covariant< std::tuple< _tFroms... >, std::tuple< _tTos... > >
struct | ystdex::is_covariant< std::function< _tFrom(_tFromParams...)>, std::function< _tTo(_tToParams...)> >
struct | ystdex::is_contravariant< _tFrom, _tTo >
| 判断指定类型之间是否逆变。 更多...
struct | ystdex::is_contravariant< _tResFrom(_tFromParams...), _tResTo(_tToParams...)>
struct | ystdex::is_contravariant< std::tuple< _tFroms... >, std::tuple< _tTos... > >
struct | ystdex::is_contravariant< std::function< _tResFrom(_tFromParams...)>, std::function< _tResTo(_tToParams...)> >
struct | ystdex::variadic_param< _vN >
| 变长参数操作模板。 更多...
struct | ystdex::variadic_param< 0U >
struct | ystdex::details::is_callable_target< _type, _tCallable >
struct | ystdex::details::is_callable_case1< _fCallable, _type >
struct | ystdex::details::is_callable_case2< _fCallable, _type >
struct | ystdex::details::is_callable_case3< _fCallable, _type >
struct | ystdex::details::is_callable_case4< _fCallable, _type >
struct | ystdex::make_parameter_tuple< typename >
| 取参数列表元组。 更多...
struct | ystdex::make_parameter_tuple< _fCallable & >
struct | ystdex::make_parameter_tuple< _fCallable && >
struct | ystdex::make_parameter_tuple< _tRet (_tParams...) >
struct | ystdex::make_parameter_tuple< _tRet(*)(_tParams...) >
struct | ystdex::make_parameter_tuple< _tRet(_tClass::*)(_tParams...) >
struct | ystdex::make_parameter_tuple< _tRet(_tClass::*)(_tParams...) const >
struct | ystdex::make_parameter_tuple< _tRet(_tClass::*)(_tParams...) volatile >
struct | ystdex::make_parameter_tuple< _tRet(_tClass::*)(_tParams...) const volatile >
struct | ystdex::make_parameter_tuple< std::function< _tRet(_tParams...)> >
struct | ystdex::return_of< typename >
| 取返回类型。 更多...
struct | ystdex::return_of< _fCallable & >
struct | ystdex::return_of< _fCallable && >
struct | ystdex::return_of< _tRet (_tParams...YPP_Args ) >
struct | ystdex::return_of< _tRet(*)(_tParams...YPP_Args ) >
struct | ystdex::return_of< _tRet (_tParams...,...) >
struct | ystdex::return_of< _tRet(*)(_tParams...,...) >
struct | ystdex::return_of< _tRet(_tClass::*)(_tParams...YPP_Args ) >
struct | ystdex::return_of< _tRet(_tClass::*)(_tParams...YPP_Args ) const >
struct | ystdex::return_of< _tRet(_tClass::*)(_tParams...YPP_Args ) volatile >
struct | ystdex::return_of< _tRet(_tClass::*)(_tParams...YPP_Args ) const volatile >
struct | ystdex::return_of< _tRet(_tClass::*)(_tParams...,...) >
struct | ystdex::return_of< _tRet(_tClass::*)(_tParams...,...) const >
struct | ystdex::return_of< _tRet(_tClass::*)(_tParams...,...) volatile >
struct | ystdex::return_of< _tRet(_tClass::*)(_tParams...,...) const volatile >
struct | ystdex::return_of< std::function< _tRet(_tParams...)> >
struct | ystdex::parameter_of< _vIdx, _fCallable >
| 取指定索引的参数类型。 更多...
struct | ystdex::paramlist_size< _fCallable >
| 取参数列表大小。 更多...
struct | ystdex::make_function_type< typename, class >
| 取指定返回类型和元组指定参数类型的函数类型。 更多...
struct | ystdex::make_function_type< _tRet, std::tuple< _tParams... > >
struct | ystdex::composed< _func, _func2 >
| 复合函数。 更多...
struct | ystdex::composed_n< _func, _func2 >
| 多元分发的复合函数。 更多...
struct | ystdex::generalized_composed< _func, _funcs >
| 多元复合函数。 更多...
struct | ystdex::one_shot< _func, _tRes, _tState >
| 调用一次的函数包装模板。 更多...
struct | ystdex::one_shot< _func, void, _tState >
struct | ystdex::one_shot< _func, _tRes, void >
struct | ystdex::one_shot< _func, void, void >
struct | ystdex::call_projection< class, class >
| 调用投影：向原调用传递序列指定的位置的参数。 更多...
struct | ystdex::call_projection< _tRet(_tParams...), index_sequence< _vSeq... > >
struct | ystdex::call_projection< std::function< _tRet(_tParams...)>, index_sequence< _vSeq... > >
struct | ystdex::call_projection< std::tuple< _tParams... >, index_sequence< _vSeq... > >
struct | ystdex::expand_proxy< _fCallable, _vLen >
struct | ystdex::expand_proxy< _fCallable, 0 >
struct | ystdex::expanded_caller< _fHandler, _fCallable >
| 接受冗余参数的可调用对象。 更多...
struct | ystdex::default_last_value< _type >
| 合并值序列。 更多...
struct | ystdex::default_last_value< void >

## 命名空间

| ystdex
| <functional> 特性测试宏。
| ystdex::details

## 类型定义

template<template< typename... > class _gOp, typename _func , typename... _tParams>
using | ystdex::enable_fallback_t = enable_if_t<!is_detected< _gOp, _tParams &&... >::value, decltype(std::declval< _func >()(std::declval< _tParams && >()...))>
| 启用备用重载。 更多...
template<typename _type , size_t _vN = 1, typename _tParam = _type>
using | ystdex::id_func_t = make_function_type_t< _type, vseq::join_n_t< _vN, std::tuple< _tParam >>>
| 取指定维数和指定参数类型的多元映射扩展恒等函数类型。 更多...
template<typename _type , size_t _vN = 1>
using | ystdex::id_func_clr_t = id_func_t< _type, _vN, const _type & >
| 取指定维数和 const 左值引用参数类型的多元映射扩展恒等函数类型。 更多...
template<typename _type , size_t _vN = 1>
using | ystdex::id_func_rr_t = id_func_t< _type, _vN, _type && >
| 取指定维数和 const 右值引用参数类型的多元映射扩展恒等函数类型。 更多...
template<typename _type >
using | ystdex::get_less = composed_n< less< _type * >, composed< addressof_op< _type >, mem_get<>>>
| get 成员小于仿函数。 更多...
template<size_t _vIdx, typename _fCallable >
using | ystdex::parameter_of_t = _t< parameter_of< _vIdx, _fCallable >>
template<typename _tRet , class _tTuple >
using | ystdex::make_function_type_t = _t< make_function_type< _tRet, _tTuple >>

## 函数

template<size_t _vN, typename... _tParams>
auto | ystdex::varg (_tParams &&...args) -> decltype(variadic_param< _vN >::get(std::forward< decltype(args)>(args)...))
| 取指定位置的变长参数。 更多...
template<typename _func , typename... _tParams>
void | ystdex::unseq_apply (_func &&f, _tParams &&...args)
| 无序调用。 更多...
template<typename _fCallable , typename _type , typename... _tParams>
auto | ystdex::details::invoke_impl (_fCallable &&f, _type &&obj, _tParams &&...args) -> enable_if_t< is_callable_case1< decay_t< _fCallable >, _type >::value, decltype((std::forward< decltype(obj)>(obj).*f)(std::forward< decltype(args)>(args)...))>
template<typename _fCallable , typename _type >
auto | ystdex::details::invoke_impl (_fCallable &&f, _type &&obj) -> enable_if_t< is_callable_case3< decay_t< _fCallable >, _type >::value, decltype(std::forward< decltype(obj)>(obj).*f)>
template<typename _func , typename... _tParams>
auto | ystdex::details::invoke_impl (_func &&f, _tParams &&...args) -> enable_if_t<!is_member_pointer< decay_t< _func >>::value, decltype(std::forward< decltype(f)>(f)(std::forward< decltype(args)>(args)...))>
template<typename _fCallable , typename... _tParams>
result_of_t< _fCallable &&(_tParams &&...)> | ystdex::invoke (_fCallable &&f, _tParams &&...args)
| 调用可调用对象。 更多...
template<typename _fCallable , typename... _tParams>
pseudo_output | ystdex::details::invoke_nonvoid_impl (true_, _fCallable &&f, _tParams &&...args)
template<typename _fCallable , typename... _tParams>
result_of_t< _fCallable &&(_tParams &&...)> | ystdex::details::invoke_nonvoid_impl (false_, _fCallable &&f, _tParams &&...args)
template<typename _fCallable , typename... _tParams>
nonvoid_result_t< result_of_t< _fCallable &&(_tParams &&...)> > | ystdex::invoke_nonvoid (_fCallable &&f, _tParams &&...args)
| 调用可调用对象，保证返回值非空。 更多...
template<typename _func , typename _func2 , typename... _tParams>
auto | ystdex::bind_forward (_func &&f, _func2 &&f2, _tParams &&...args) -> decltype(ystdex::bind1(std::forward< decltype(f)>(f), std::bind(std::forward< decltype(f2)>(f2), std::placeholders::_2, std::forward< decltype(args)>(args)...)))
| 复合调用 ystdex::bind1 和 std::placeholders::_2 以实现值的设置。 更多...
template<typename _type , typename _fCallable , typename... _tParams>
_type | ystdex::details::call_for_value (true_, _type &&val, _fCallable &&f, _tParams &&...args)
template<typename _type , typename _fCallable , typename... _tParams>
auto | ystdex::details::call_for_value (false_, _type &&, _fCallable &&f, _tParams &&...args) -> result_of_t< _fCallable &&(_tParams &&...)>
template<typename _type , typename _fCallable , typename... _tParams>
auto | ystdex::call_for_value (_type &&val, _fCallable &&f, _tParams &&...args) -> common_nonvoid_t< result_of_t< _fCallable &&(_tParams &&...)>, _type >
| 调用第二个参数起指定的函数对象，若返回空类型则使用第一个参数的值为返回值。 更多...
template<typename _func , class _tTuple >
auto | ystdex::apply (_func &&f, _tTuple &&args) -> decltype(call_projection< _tTuple, make_index_sequence< std::tuple_size< decay_t< _tTuple >>::value >>::call(std::forward< decltype(f)>(f), std::forward< decltype(args)>(args)))
| 应用函数对象和参数元组。 更多...
template<typename _fCond , typename _fCallable , typename... _tParams>
result_of_t< _fCallable &&(_tParams &&...)> | ystdex::retry_on_cond (_fCond cond, _fCallable &&f, _tParams &&...args)
| 循环重复调用：代替直接使用 do-while 语句以避免过多引入作用域外的变量。 更多...
template<typename... _tParams>
size_t | ystdex::sizeof_params (_tParams &&...)
| 统计函数参数列表中的参数个数。 更多...
template<typename _func >
void | ystdex::chain_apply (_func &&f)
| 顺序链式调用。 更多...
template<typename _func , typename _type , typename... _tParams>
void | ystdex::chain_apply (_func &&f, _type &&arg, _tParams &&...args)
template<typename _func >
void | ystdex::seq_apply (_func &&)
| 顺序递归调用。 更多...
template<typename _func , typename _type , typename... _tParams>
void | ystdex::seq_apply (_func &&f, _type &&arg, _tParams &&...args)
template<typename _type , typename _func >
auto | ystdex::invoke_value_or (_func f, _type &&p) -> decay_t< decltype(ystdex::invoke(f,*std::forward< decltype(p)>(p)))>
| 使用 invoke 调用非空值或取默认值。 更多...
template<typename _tOther , typename _type , typename _func >
auto | ystdex::invoke_value_or (_func f, _type &&p, _tOther &&other) -> decltype(p?ystdex::invoke(f,*std::forward< decltype(p)>(p)):std::forward< decltype(other)>(other))
template<typename _tOther , typename _type , typename _func , typename _tSentinal = nullptr_t>
auto | ystdex::invoke_value_or (_func f, _type &&p, _tOther &&other, _tSentinal &&last) -> decltype(!bool(p==std::forward< decltype(last)>(last))?ystdex::invoke(f,*std::forward< decltype(p)>(p)):std::forward< decltype(other)>(other))
template<typename _func , typename... _tParams>
auto | ystdex::bind1 (_func &&f, _tParams &&...args) -> decltype(std::bind(std::forward< decltype(f)>(f), std::placeholders::_1, std::forward< decltype(args)>(args)...))
| 复合调用 std::bind 和 std::placeholders::_1 。 更多...
template<typename _tRes , typename _func , typename... _tParams>
auto | ystdex::bind1 (_func &&f, _tParams &&...args) -> decltype(std::bind< _tRes >(std::forward< decltype(f)>(f), std::placeholders::_1, std::forward< decltype(args)>(args)...))
template<typename _func , typename _func2 >
composed< _func, _func2 > | ystdex::compose (_func f, _func2 g)
| 函数复合。 更多...
template<typename _func , typename _func2 , typename _func3 , typename... _funcs>
auto | ystdex::compose (_func f, _func2 g, _func3 h, _funcs...args) -> decltype(ystdex::compose(ystdex::compose(f, g), h, args...))
template<typename _func , typename _func2 >
composed_n< _func, _func2 > | ystdex::compose_n (_func f, _func2 g)
| 单一分派的多元函数复合。 更多...
template<typename _func , typename _func2 , typename _func3 , typename... _funcs>
auto | ystdex::compose_n (_func f, _func2 g, _func3 h, _funcs...args) -> decltype(ystdex::compose_n(ystdex::compose_n(f, g), h, args...))
#define | YB_Impl_Functional_ptuple_spec(_exp, _p, _q)
#define | YB_Impl_Functional_ptuple_spec_mf(_q) YB_Impl_Functional_ptuple_spec(class _tClass YPP_Comma, (_tClass::*), _q)
template<typename _fCallable >
using | ystdex::make_parameter_tuple_t = _t< make_parameter_tuple< _fCallable >>
#define | YB_Impl_Functional_ret_spec(_exp, _p, _e, _q)
#define | YB_Impl_Functional_ret_spec_f(_e)
#define | YB_Impl_Functional_ret_spec_mf(_e, _q)
#define | YB_Impl_Functional_ret_spec_mfq(_e)
template<typename _fCallable >
using | ystdex::return_of_t = _t< return_of< _fCallable >>

## 详细描述

函数和可调用对象。

版本
  r3178

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

自从
  build 333

创建时间:
  2010-08-22 13:04:29 +0800

修改时间:
  2017-04-05 15:08 +0800

文本编码:
  UTF-8

模块名称:
  YStandardEx::Functional

在文件 functional.hpp 中定义.

## 宏定义说明

#define YB_Impl_Functional_ptuple_spec | ( |  | _exp,
|  |  | _p,
|  |  | _q
| ) |  |

值:
template<typename _tRet, _exp typename... _tParams> \
struct make_parameter_tuple<_tRet _p (_tParams...) _q> \
{ \
using type = std::tuple<_tParams...>; \
};

在文件 functional.hpp 第 437 行定义.

#define YB_Impl_Functional_ptuple_spec_mf | ( |  | _q | ) | YB_Impl_Functional_ptuple_spec(class _tClass YPP_Comma, (_tClass::*), _q)

在文件 functional.hpp 第 447 行定义.

#define YB_Impl_Functional_ret_spec | ( |  | _exp,
|  |  | _p,
|  |  | _e,
|  |  | _q
| ) |  |

值:
template<typename _tRet, _exp typename... _tParams> \
struct return_of<_tRet _p (_tParams... YPP_Args _e) _q> \
{ \
using type = _tRet; \
};
YPP_Args
#define YPP_Args(...)
替换列表。
Definition: ydef.h:216

在文件 functional.hpp 第 494 行定义.

#define YB_Impl_Functional_ret_spec_f | ( |  | _e | ) |

值:
YB_Impl_Functional_ret_spec(, , _e, ) \
YB_Impl_Functional_ret_spec(, (*), _e, )
YB_Impl_Functional_ret_spec
#define YB_Impl_Functional_ret_spec(_exp, _p, _e, _q)
Definition: functional.hpp:494

在文件 functional.hpp 第 501 行定义.

#define YB_Impl_Functional_ret_spec_mf | ( |  | _e,
|  |  | _q
| ) |  |

值:
YB_Impl_Functional_ret_spec(class _tClass YPP_Comma, (_tClass::*), \
_e, _q)
YB_Impl_Functional_ret_spec
#define YB_Impl_Functional_ret_spec(_exp, _p, _e, _q)
Definition: functional.hpp:494
YPP_Comma
#define YPP_Comma
替换为逗号的预处理记号。
Definition: ydef.h:225

在文件 functional.hpp 第 511 行定义.

#define YB_Impl_Functional_ret_spec_mfq | ( |  | _e | ) |

值:
YB_Impl_Functional_ret_spec_mf(_e, ) \
YB_Impl_Functional_ret_spec_mf(_e, const) \
YB_Impl_Functional_ret_spec_mf(_e, volatile) \
YB_Impl_Functional_ret_spec_mf(_e, const volatile)
YB_Impl_Functional_ret_spec_mf
#define YB_Impl_Functional_ret_spec_mf(_e, _q)
Definition: functional.hpp:511

在文件 functional.hpp 第 515 行定义.