![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
conversion_traits<> traits classBoost , Chapter 1. Boost.NumericConversion , Chapter 1. Boost.NumericConversion
namespace boost { namespace numeric { enum int_float_mixture_enum { integral_to_integral ,integral_to_float ,float_to_integral ,float_to_float } ; } } // namespace boost::numeric namespace boost { namespace numeric { enum sign_mixture_enum { unsigned_to_unsigned ,signed_to_signed ,signed_to_unsigned ,unsigned_to_signed } ; } } // namespace boost::numeric namespace boost { namespace numeric { enum udt_builtin_mixture_enum { builtin_to_builtin ,builtin_to_udt ,udt_to_builtin ,udt_to_udt } ; } } // namespace boost::numeric namespace boost { namespace numeric { template <class T, class S> struct int_float_mixture : mpl::integral_c<int_float_mixture_enum, impl-def-value> {} ; } } // namespace boost::numeric Классифицируя< Его< namespace boost { namespace numeric { template <class T, class S> struct sign_mixture : mpl::integral_c<sign_mixture_enum, impl-def-value> {} ; } } // namespace boost::numeric Классифицируя< Его< namespace boost { namespace numeric { template <class T, class S> struct udt_builtin_mixture : mpl::integral_c<udt_builtin__mixture_enum, impl-def-value> {} ; } } // namespace boost::numeric Классифицируя< Его< namespace boost { namespace numeric { template <class T, class S> struct is_subranged : mpl::bool_<impl-def-value> {} ; } } // namespace boost::numeric Указывает, является ли диапазон целевого типа< Это интегральная константаMPL. Он не указывает, является ли конкретное преобразование фактически вне диапазона; он указывает на то, что некоторое преобразование может быть вне диапазона, поскольку не все исходные значения представляются в виде целевого типа. namespace boost { namespace numeric { template <class T, class S> struct conversion_traits { mpl::integral_c<int_float_mixture_enum , ...> int_float_mixture ; mpl::integral_c<sign_mixture_enum , ...> sign_mixture; mpl::integral_c<udt_builtin_mixture_enum, ...> udt_builtin_mixture ; mpl::bool_<...> subranged ; mpl::bool_<...> trivial ; typedef T target_type ; typedef S source_type ; typedef ... argument_type ; typedef ... result_type ; typedef ... supertype ; typedef ... subtype ; } ; } } // namespace numeric, namespace boost Этот класс признаков указывает на некоторые свойстванаправления численного преобразования: от типа источника< Класс признаков обеспечивает следующуюинтегральную константу MPL. Они выражают комбинацию определенных атрибутов типов Источника и Цели (таким образом, они называются смесью):
Класс признаков обеспечивает следующуюинтегральную константу MPL\s булевого типа, которая косвенно указывает на связь между диапазонами Источника и Цели (см.Определениядля деталей).
Класс признаков обеспечивает следующие типы. Они являются источниками и целевыми типами, классифицированными и квалифицированными для различных целей.
#include <cassert> #include <typeinfo> #include <boost/numeric/conversion/conversion_traits.hpp> int main() { // A trivial conversion. typedef boost::numeric::conversion_traits<short,short> Short2Short_Traits ; assert ( Short2Short_Traits::trivial::value ) ; // A subranged conversion. typedef boost::numeric::conversion_traits<double,unsigned int> UInt2Double_Traits ; assert ( UInt2Double_Traits::int_float_mixture::value == boost::numeric::integral_to_float ) ; assert ( UInt2Double_Traits::sign_mixture::value == boost::numeric::unsigned_to_signed ) ; assert ( !UInt2Double_Traits::subranged::value ) ; assert ( typeid(UInt2Double_Traits::supertype) == typeid(double) ) ; assert ( typeid(UInt2Double_Traits::subtype) == typeid(unsigned int) ) ; // A doubly subranged conversion. assert ( (boost::numeric::conversion_traits<short, unsigned short>::subranged::value) ); assert ( (boost::numeric::conversion_traits<unsigned short, short>::subranged::value) ); return 0; } Статья conversion_traits<> traits class раздела Chapter 1. Boost.NumericConversion Chapter 1. Boost.NumericConversion может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Chapter 1. Boost.NumericConversion ::
|
||||||||||||||||||||||||||||||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |