Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

conversion_traits<> traits class

Boost , Chapter 1. Boost.NumericConversion , Chapter 1. Boost.NumericConversion

Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext
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

Классифицируя<S>и<T>как интегральные или плавающие, этаИнтегральная постоянная MPLуказывает на комбинацию этих атрибутов.

Его<::value>является перечислением типа<boost::numeric::int_float_mixture_enum>

namespace boost { namespace numeric {
    template <class T, class S>
    struct sign_mixture : mpl::integral_c<sign_mixture_enum, impl-def-value> {} ;
} } // namespace boost::numeric

Классифицируя<S>и<T>как подписанные или неподписанные, этаинтегральная постоянная MPLуказывает на сочетание этих атрибутов.

Его<::value>тип перечисления<boost::numeric::sign_mixture_enum>

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

Классифицируя<S>и<T>как определяемые пользователем или встроенные, этаинтегральная постоянная MPLуказывает на комбинацию этих атрибутов.

Его<::value>тип перечисления<boost::numeric::udt_builtin_mixture_enum>

namespace boost { namespace numeric {
    template <class T, class S>
    struct is_subranged : mpl::bool_<impl-def-value> {} ;
} } // namespace boost::numeric

Указывает, является ли диапазон целевого типа<T>подмножеством диапазона типа источника<S>. То есть, если есть некоторые исходные значения, которые выпадают из диапазона целевого типа.

Это интегральная константа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

Этот класс признаков указывает на некоторые свойстванаправления численного преобразования: от типа источника<S>до типа цели<T>. Это не указывает на свойстваконкретногопреобразования, а на направление преобразования. См.Определениядля деталей.

Класс признаков обеспечивает следующуюинтегральную константу MPL. Они выражают комбинацию определенных атрибутов типов Источника и Цели (таким образом, они называются смесью):

int_float_mixture

То же самое, что и класс признаковint_float_mixture

знак_смесь

То же самое, что указано классом признаковsign_mixture

udt_builtin_mixture

То же самое, что и класс признаковudt_builtin_mixture

Класс признаков обеспечивает следующуюинтегральную константу MPL\s булевого типа, которая косвенно указывает на связь между диапазонами Источника и Цели (см.Определениядля деталей).

подгруппированный

То же, что и,

.

Тривиальный

Указывает, что и Источник, и Цельбез квалификаций cvявляются одним и тем же типом.

Его<::value>булевого типа.

Класс признаков обеспечивает следующие типы. Они являются источниками и целевыми типами, классифицированными и квалифицированными для различных целей.

target_type

Параметр шаблона<T>без квалификаций cv

Источник_тип

Параметр шаблона<S>без квалификаций cv

Аргумент_тип

Этот тип является либо source_type, либо<source_type const&>.

Он представляет собой оптимальный тип аргумента для функцийпреобразователя.

Если S является встроенным типом, это<source_type>, в противном случае это<source_type const&>

.

результат_тип

Этот тип является либо target_type, либо target_type const&

Он представляет собой возвращаемый тип функциипреобразователя.

Если<T==S>, то<target_type const&>, в противном случае<target_type>

.

супертип

Если преобразование подгруппировано, то оно<source_type>, в противном случае оно<target_type>

.

подтип

Если преобразование подгруппировано, то оно<target_type>, в противном случае оно<source_type>

.
#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;
}

PrevUpHomeNext

Статья conversion_traits<> traits class раздела Chapter 1. Boost.NumericConversion Chapter 1. Boost.NumericConversion может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 1. Boost.NumericConversion ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:46:53/0.010014057159424/1