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

Integer Type Selection

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

шаблоны выбора типа позволяют выбирать целые типы на основе желаемых характеристик, таких как количество битов или максимальное значение. Этот объект особенно полезен для решения общих проблем программирования.

namespace boost
{
  //  fast integers from least integers
  template<typename LeastInt>
  struct int_fast_t
  {
      typedef implementation-defined-type  type;
  };
  //  signed
  template<int Bits>
  struct int_t
  {
      /* Member exact may or may not be defined depending upon Bits */
      typedef implementation-defined-type  exact;
      typedef implementation-defined-type  least;
      typedef int_fast_t<least>::fast      fast;
  };
  //  unsigned
  template<int Bits>
  struct uint_t
  {
      /* Member exact may or may not be defined depending upon Bits */
      typedef implementation-defined-type  exact;
      typedef implementation-defined-type  least;
      typedef int_fast_t<least>::fast      fast;
  };
  //  signed
  template<long long MaxValue>
  struct int_max_value_t
  {
      typedef implementation-defined-type  least;
      typedef int_fast_t<least>::fast      fast;
  };
  template<long long MinValue>
  struct int_min_value_t
  {
      typedef implementation-defined-type  least;
      typedef int_fast_t<least>::fast      fast;
  };
  //  unsigned
  template<unsigned long long Value>
  struct uint_value_t
  {
      typedef implementation-defined-type  least;
      typedef int_fast_t<least>::fast      fast;
  };
} // namespace boost

Шаблон класса int_fast_t отображает свой тип ввода на следующий по величине тип, которым процессор может манипулировать самым простым, или сам по себе, если тип ввода уже является простым в управлении типом. Например, обработка куча объектов char может идти быстрее, если они были преобразованы в объекты int перед обработкой. Тип ввода, передаваемый как единственный параметр шаблона, должен быть встроенным интегральным типом, за исключением bool. Могут использоваться неподписанные интегральные типы, а также подписанные интегральные типы. Тип вывода приводится как вложенный тип фаст.

Примечания к выполнению: По умолчанию тип вывода идентичен типу ввода. В конце концов, реализация этого кода должна быть настроена для каждой платформы, чтобы дать точное отображение между встроенными типами и самыми простыми в использовании встроенными типами. Кроме того, нет гарантии, что тип вывода на самом деле легче манипулировать, чем тип ввода.

int_t, uint_t, int_max_value_t, int_min_value_t, и uint_value_t шаблоны классов находят наиболее аппропиатный интегральный тип для данного параметра шаблона. Этот тип присваивается вложенным типом Least. Самый простой в использовании вариант этого типа приводится вложенным типом фаст. В следующей таблице описываются критерии каждого шаблона.

Table 1. Criteria for the Sized Type Class Templates

Шаблон класса

Картирование параметров шаблона

boost::int_t< N>::Least

Самый маленький, встроенный, подписанный интегральный тип с по крайней мере N битами, включая бит знака. Параметр должен быть положительным числом. Ошибка компиляции - время компиляции, если параметр больше, чем количество битов в самом крупном целочисленном типе.

boost::int_t< N>::fast

Самый простой в управлении, встроенный, подписанный интегральный тип с по крайней мере N битами, включая бит знака. Параметр должен быть положительным числом. Ошибка компиляции - время компиляции, если параметр больше, чем количество битов в самом крупном целочисленном типе.

boost::int_t::exact

Встроенный, подписанный интегральный тип с ровно N битами, включая знак. Параметр должен быть положительным числом. Обратите внимание, что член exact определяется только, если существует тип с ровно N битами.

boost::uint_t< N>::Least

Самый маленький, встроенный, неподписанный интегральный тип с по крайней мере N битами. Параметр должен быть положительным числом. Ошибка компиляции - время компиляции, если параметр больше, чем количество битов в самом крупном целочисленном типе.

boost::uint_t< ; N>::fast

Самый простой в управлении, встроенный, неподписанный интегральный тип с по крайней мере N битами. Параметр должен быть положительным числом. Ошибка компиляции - время компиляции, если параметр больше, чем количество битов в самом крупном целочисленном типе.

boost::uint_t::exact

Встроенный, неподписанный интегральный тип с ровно N битами. Параметр должен быть положительным числом. Ошибка компиляции - время компиляции, если параметр больше, чем количество битов в самом крупном целочисленном типе. Обратите внимание, что член exact определяется только, если существует тип с ровно N битами.

boost::int_max_value_t::last

Самый маленький, встроенный, подписанный интегральный тип, который может удерживать все значения в инклюзивном диапазоне 0 - V. Параметр должен быть положительным числом.

boost::int_max_value_t::fast

Самый простой в управлении, встроенный, подписанный интегральный тип, который может удерживать все значения в инклюзивном диапазоне 0 - V. Параметр должен быть положительным числом.

boost::int_min_value_t::least

Самый маленький, встроенный, подписанный интегральный тип, который может удерживать все значения в инклюзивном диапазоне V - 0. Параметр должен быть отрицательным числом.

boost::int_min_value_t::fast

Самый простой в управлении, встроенный, подписанный интегральный тип, который может удерживать все значения в инклюзивном диапазоне V - 0. Параметр должен быть отрицательным числом.

boost::uint_value_t::least

Самый маленький, встроенный, неподписанный интегральный тип, который может содержать все положительные значения до и включая V. Параметр должен быть положительным числом.

boost::uint_value_t::fast

Самый простой в управлении, встроенный, неподписанный интегральный тип, который может содержать все положительные значения до и включая V. Параметр должен быть положительным числом.


#include <boost/integer.hpp>
//...
int main()
{
    boost::int_t<24>::least my_var;  // my_var has at least 24-bits
    //...
    // This one is guarenteed not to be truncated:
    boost::int_max_value_t<1000>::least my1000 = 1000;
    //...
    // This one is guarenteed not to be truncated, and as fast
    // to manipulate as possible, its size may be greater than
    // that of my1000:
    boost::int_max_value_t<1000>::fast my_fast1000 = 1000;
}

Программа integer_test.cpp является упрощенной демонстрацией результатов от мгновенных различных примеров типовых шаблонов.

Основание для разработки шаблонов в этом заголовке включает:

  • Избегайте рекурсий из-за беспокойства по поводу ограниченной гарантированной глубины рекурсии C++ (17).
  • Избегайте макросов на общих принципах.
  • Попробуйте сохранить дизайн как можно проще.

Если количество требуемых битов известно заранее, может быть более целесообразным использовать типы, поставляемые в .

Автором большинства целочисленных типов Boost является выбор шаблонов Beman Dawes. Он благодарит Валентина Бонарда и Kevlin Henney за то, что они поделились своими проектами для подобных шаблонов. Daryle Walker спроектировал шаблоны размером с стоимость.


PrevUpHomeNext

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 19:02:14/0.029706001281738/1