YSTest: Cast

YSTest PreAlpha_b700_20160611 The YSLib Test Project

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

命名空间 | 类 | 函数
Cast

显式类型转换。 更多...

Cast 的协作图:

## 命名空间

| ystdex::details

## 类

struct | ystdex::details::general_polymorphic_cast_helper< _tFrom, _tTo, _bNonVirtualDownCast >
struct | ystdex::details::general_polymorphic_cast_helper< _tFrom, _tTo, false >
struct | ystdex::details::general_cast_helper< _tFrom, _tTo, _bUseStaticCast >
struct | ystdex::details::general_cast_helper< _tFrom, _tTo, false >
struct | ystdex::details::general_cast_helper< _type, _type, true >
struct | ystdex::details::general_cast_helper< _type, _type, false >

## 函数

template<typename _tSrc , typename _tDst = const decay_t<_tSrc>&&>
_tDst | ystdex::qualify (_tSrc &&arg)
| 允许添加限定符转换。 更多...
template<typename _pDst , class _tSrc >
_pDst | ystdex::polymorphic_cast (_tSrc *v)
| 多态类指针类型转换。 更多...
template<typename _pDst , class _tSrc >
_pDst | ystdex::polymorphic_downcast (_tSrc *v)
| 多态类指针向派生类指针转换。 更多...
template<typename _rDst , class _tSrc >
enable_if_t< is_lvalue_reference< _rDst >::value, _rDst > | ystdex::polymorphic_downcast (_tSrc &v)
template<typename _rDst , class _tSrc >
enable_if_t< is_rvalue_reference< _rDst >::value &&!is_reference< _tSrc >::value, _rDst > | ystdex::polymorphic_downcast (_tSrc &&v)
template<class _tDst , typename _tSrc , typename _tDeleter >
enable_if_t<!is_reference< _tDst >::value &&!is_array< _tDst >::value, std::unique_ptr< _tDst, _tDeleter > > | ystdex::polymorphic_downcast (std::unique_ptr< _tSrc, _tDeleter > &&v)
template<class _tDst , typename _tSrc >
enable_if_t<!is_reference< _tDst >::value &&!is_array< _tDst >::value, std::shared_ptr< _tDst > > | ystdex::polymorphic_downcast (const std::unique_ptr< _tSrc > &v)
template<typename _pDst , class _tSrc >
_pDst | ystdex::polymorphic_crosscast (_tSrc *v)
| 多态类指针交叉转换。 更多...
template<typename _rDst , class _tSrc >
_rDst | ystdex::polymorphic_crosscast (_tSrc &v)
template<typename _rDst , class _tSrc >
enable_if_t<!is_reference< _tSrc >::value, _rDst > | ystdex::polymorphic_crosscast (_tSrc &&v)
template<typename _tDst , typename _tSrc >
_tDst | ystdex::general_cast (_tSrc *v)
| 一般类型转换。 更多...
template<typename _tDst , typename _tSrc >
_tDst | ystdex::general_cast (_tSrc &v)
template<typename _tDst , typename _tSrc >
const _tDst | ystdex::general_cast (const _tSrc &v)
template<typename _pDst , typename _tSrc >
ystdex::enable_if_t< and_< is_object_pointer< _pDst >, is_aligned_compatible< _tSrc, remove_pointer_t< _pDst > > >::value, _pDst > | ystdex::aligned_cast (_tSrc *v)
| 保证对齐兼容的显式转换。 更多...
template<typename _rDst , typename _tSrc , typename = ystdex::enable_if_t< and_<is_reference<_rDst>, is_aligned_compatible<remove_reference_t<_tSrc>, remove_reference_t<_rDst>>>::value>>
auto | ystdex::aligned_cast (_tSrc &&v) -> decltype(std::forward< decltype(reinterpret_cast< _rDst >(v))>(reinterpret_cast< _rDst >(v)))

## 详细描述

显式类型转换。

自从
  build 243

## 函数说明

template<typename _pDst , typename _tSrc >

ystdex::enable_if_t<and_<is_object_pointer<_pDst>, is_aligned_compatible<_tSrc, remove_pointer_t<_pDst> > >::value, _pDst> ystdex::aligned_cast | ( | _tSrc * | v | ) |

inline

保证对齐兼容的显式转换。

前置条件
  目标类型是对象指针或引用。

注解
  使用 `reinterpret_cast` 且保证目标类型的对齐要求不比源类型更严格以保证可逆。
  用于替代针对满足 is_aligned_compatible 要求对象的 `reinterpret_cast` 。

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

template<typename _rDst , typename _tSrc , typename = ystdex::enable_if_t< and_<is_reference<_rDst>, is_aligned_compatible<remove_reference_t<_tSrc>, remove_reference_t<_rDst>>>::value>>

auto ystdex::aligned_cast | ( | _tSrc && | v | ) | -> decltype(std::forward<decltype( reinterpret_cast<_rDst>(v) )>( reinterpret_cast<_rDst>(v) ))

inline

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

template<typename _tDst , typename _tSrc >

_tDst ystdex::general_cast | ( | _tSrc * | v | ) |

inline

一般类型转换。

模板参数

  _tSrc | 源类型。
  _tDst | 目标类型。

自从
  build 175

待办事项:
  扩展接受右值引用参数。

能确保安全隐式转换时使用 static_cast ； 除此之外非虚基类向派生类转换使用 polymophic_downcast； 否则使用 dynamic_cast。

在文件 cast.hpp 第 320 行定义.

template<typename _tDst , typename _tSrc >

_tDst ystdex::general_cast | ( | _tSrc & | v | ) |

inline

在文件 cast.hpp 第 327 行定义.

template<typename _tDst , typename _tSrc >

const _tDst ystdex::general_cast | ( | const _tSrc & | v | ) |

inline

在文件 cast.hpp 第 334 行定义.

template<typename _pDst , class _tSrc >

_pDst ystdex::polymorphic_cast | ( | _tSrc * | v | ) |

inline

多态类指针类型转换。

模板参数

  _tSrc | 源类型。
  _pDst | 目标类型。

前置条件
  静态断言： _tSrc 是多态类。
  静态断言： _pDst 是内建指针。

异常

  std::bad_cast | dynamic_cast 失败。

自从
  build 175

在文件 cast.hpp 第 75 行定义.

参考 platform::p.

template<typename _pDst , class _tSrc >

_pDst ystdex::polymorphic_crosscast | ( | _tSrc * | v | ) |

inline

多态类指针交叉转换。

模板参数

  _tSrc | 源类型。
  _pDst | 目标类型。

前置条件
  静态断言： _tSrc 是多态类。
  静态断言： _pDst 是内建指针。
  断言： dynamic_cast 成功。

返回
  非空结果。

注解
  空指针作为参数一定失败。

自从
  build 179

在文件 cast.hpp 第 186 行定义.

参考 platform::p , 以及 yassume.

template<typename _rDst , class _tSrc >

_rDst ystdex::polymorphic_crosscast | ( | _tSrc & | v | ) |

inline

模板参数

  _tSrc | 源类型。
  _rDst | 目标类型。

前置条件
  静态断言： _rDst 是左值引用。

自从
  build 496

在文件 cast.hpp 第 204 行定义.

template<typename _rDst , class _tSrc >

enable_if_t<!is_reference<_tSrc>::value, _rDst> ystdex::polymorphic_crosscast | ( | _tSrc && | v | ) |

inline

模板参数

  _tSrc | 源类型。
  _rDst | 目标类型。

前置条件
  静态断言： _rDst 是右值引用。

自从
  build 496

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

参考 v.

template<typename _pDst , class _tSrc >

_pDst ystdex::polymorphic_downcast | ( | _tSrc * | v | ) |

inline

多态类指针向派生类指针转换。

自从
  build 674

模板参数

  _tSrc | 源类型。
  _pDst | 目标类型。

前置条件
  静态断言： _tSrc 是多态类。
  静态断言： _pDst 是内建指针。
  静态断言： _tSrc 是 _pDst 指向的类去除修饰符后的基类。
  断言： dynamic_cast 成功。

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

参考 v , 以及 yassume.

template<typename _rDst , class _tSrc >

enable_if_t<is_lvalue_reference<_rDst>::value, _rDst> ystdex::polymorphic_downcast | ( | _tSrc & | v | ) |

inline

模板参数

  _tSrc | 源类型。
  _rDst | 目标类型。

前置条件
  静态断言： _rDst 是左值引用。

在文件 cast.hpp 第 117 行定义.

参考 v.

template<typename _rDst , class _tSrc >

enable_if_t<is_rvalue_reference<_rDst>::value && !is_reference<_tSrc>::value, _rDst> ystdex::polymorphic_downcast | ( | _tSrc && | v | ) |

inline

模板参数

  _tSrc | 源类型。
  _rDst | 目标类型。

前置条件
  静态断言： _rDst 是右值引用。

在文件 cast.hpp 第 130 行定义.

参考 v.

template<class _tDst , typename _tSrc , typename _tDeleter >

enable_if_t<!is_reference<_tDst>::value && !is_array<_tDst>::value, std::unique_ptr<_tDst, _tDeleter> > ystdex::polymorphic_downcast | ( | std::unique_ptr< _tSrc, _tDeleter > && | v | ) |

inline

模板参数

  _tSrc | 源的元素类型。
  _tDst | 目标的元素类型。
  _tDeleter | 删除器类型。

前置条件
  _tDst 可通过 `release()` 取得的指针和删除器右值构造。
  断言：调用 polymorphic_downcast 转换 `release()` 取得的指针保证无异常抛出。

注解
  使用 ADL 调用 polymorphic_downcast 转换 `release()` 取得的指针。

在文件 cast.hpp 第 145 行定义.

参考 v, yassume , 以及 ynoexcept_assert.

template<class _tDst , typename _tSrc >

enable_if_t<!is_reference<_tDst>::value && !is_array<_tDst>::value, std::shared_ptr<_tDst> > ystdex::polymorphic_downcast | ( | const std::unique_ptr< _tSrc > & | v | ) |

inline

模板参数

  _tSrc | 源的元素类型。
  _tDst | 目标的元素类型。

前置条件
  _tDst 可通过 `get()` 取得的指针和删除器右值构造。

在文件 cast.hpp 第 164 行定义.

参考 ystdex::static_pointer_cast(), v , 以及 yassume.

函数调用图:
template<typename _tSrc , typename _tDst = const decay_t<_tSrc>&&>

_tDst ystdex::qualify | ( | _tSrc && | arg | ) |

inline

允许添加限定符转换。

前置条件
  源类型和目标类型退化后相同。

注解
  指定源类型优先，可自动推导目标类型。

参见
  as_const

自从
  build 531

在文件 cast.hpp 第 55 行定义.