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

Integer Traits

Boost , Boost.Integer , Boost.Integer

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Стандартная библиотека C++header предоставляет шаблон классаЦифровые ограничения<>со специализациями для каждого фундаментального типа.

Для целых типов интересные членыstd:Цифровые ограничения<>являются:

static const bool is_specialized;      // Will be true for integer types.
static T min() throw();                // Smallest representable value.
static T max() throw();                // Largest representable value.
static const int digits;               // For integers, the number of value bits.
static const int digits10;             // The number of base 10 digits that can be represented.
static const bool is_signed;           // True if the type is signed.
static const bool is_integer;          // Will be true for all integer types.

Для многих применений этого достаточно. Но min() и max() являются проблематичными, потому что они не являются постоянными выражениями (std::5.19), но некоторые использования требуют постоянных выражений.

Класс шаблоновinteger_traitsрешает эту проблему.

namespace boost {
  template<class T>
  class integer_traits : public std::numeric_limits<T>
  {
  public:
     static const bool is_integral = false;
     //
     // These members are defined only if T is a built-in
     // integal type:
     //
     static const T const_min = implementation-defined;
     static const T const_max = implementation-defined;
  };
}

Класс шаблоновinteger_traitsпроисходит отstd::numeric_limits. Первичная специализация добавляет одиночныйboolчленявляется_интегральнымс постоянным значением времени компиляцииложным. Однако для всех интегральных типовT(std::3.9.1/7 [basic.fundamental]) предусмотрены специализации со следующими константами времени компиляции, определенными:

член

тип

ценность

является интегральным

Буль

истинно

const_min

Т

эквивалентноstd::numeric_limits< T>::min()

const_max

Т

эквивалентноstd::numeric_limits< T>::max()

Примечание: Флагявляется_интегральным, поскольку определяемый пользователем целочисленный класс должен специализироватьсяstd::numeric_limits<>::is_integer = true, в то время как константы времени компиляцииconst_minиconst_maxне предусмотрены для этого определяемого пользователем класса, если только усилитель::integer_traits также не является специализированным.

Программаinteger_traits_test.cppосуществляет классinteger_traits.

Беман Доуз, Эд Брей, Стив Клири и Натан Майерс обсудили идею целых черт в списке рассылки в августе 1999 года.


PrevUpHomeNext

Статья Integer Traits раздела Boost.Integer Boost.Integer может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Boost.Integer ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 18:16:27/0.0085430145263672/1