Библиотека BOOST C++: шаблоны для выбора целочисленных типов

Шаблоны в <boost/integer.hpp> позволяют выбирать целый тип по желаемым характеристикам, таким как число битов или максимальному значению. Эти шаблоны особенно полезны при решении задач обобщенного программирования.

Содержание

Обзор

Типы с максимальной эффективностью (easiest-to-manipulate)

Типы с заданным размером

Пример

Демонстрационная программа

Обоснование

Альтернатива

Благодарности

Обзор

namespace boost
{
  //  fast integers from least integers
  template< typename LeastInt >
  struct int_fast_t
  {
      typedef implementation_supplied  fast;
  };

  //  signed
  template< int Bits >
  struct int_t 
  {
      typedef implementation_supplied  least;
      typedef int_fast_t<least>::fast  fast;
  };

  //  unsigned
  template< int Bits >
  struct uint_t 
  {
      typedef implementation_supplied  least;
      typedef int_fast_t<least>::fast  fast;
  };

  //  signed
  template< long MaxValue >
  struct int_max_value_t 
  {
      typedef implementation_supplied  least;
      typedef int_fast_t<least>::fast  fast;
  };

  template< long MinValue >
  struct int_min_value_t 
  {
      typedef implementation_supplied  least;
      typedef int_fast_t<least>::fast  fast;
  };

  //  unsigned
  template< unsigned long Value >
  struct uint_value_t 
  {
      typedef implementation_supplied  least;
      typedef int_fast_t<least>::fast  fast;
  };
} // namespace boost

Типы с максимальной эффективностью (easiest-to-manipulate)

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

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

Типы с заданным размером

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

Критерии для шаблонов типов с заданным размеромм
Шаблонный класс Отображение параметров шаблона
boost::int_t Наименьший встроенный знаковый целый тип с минимум заданным количеством битов, включая знаковый бит. Параметр шаблона должен быть положительным числом. Если параметр больше, чем число битов в типе long, то возникает ошибка компиляции.
boost::uint_t Наименьший встроенный знаковый целый тип с минимум заданным количеством битов. Параметр шаблона должен быть положительным числом. Если параметр большее, чем число битов в типе unsigned long, то возникает ошибка компиляции.
boost::int_max_value_t Самый маленький встроенный знаковый тип, для которого заданная величина является максимальной. Параметр шаблона должен быть положительным числом.
boost::int_min_value_t Самый маленький встроенный знаковый тип, для которого заданная величина является минимальной. Параметр шаблона должен быть положительным числом.
boost::uint_value_t Самый маленький встроенный беззнаковый целый тип, для которого заданная величина является максимальной. Параметр шаблона должен быть положительным числом.

Example

###include <boost/integer.hpp>

//...

int main()
{
    boost::int_t<24>::least my_var;
    //..}

Demonstration Program

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

Обоснование

Целями при разработке шаблонов были:

Альтернатива

Если число требуемых битов известно заранее, то лучше использовать типы из <boost/cstdint.hpp>.

Благодарности

Автор большинства шаблонов для выбора целых типов - Beman Dawes. Он выражает благодарность Валентину Боннарду (Valentin Bonnard) и Кевину Хэнни (Kevlin Henney) за их вклад в виде разработки похожих шаблонов. Daryle Walker разработал шаблон для выбора типа по значению.


Revised May 20, 2001

© Copyright Beman Dawes 1999. Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.

Последняя правка: 12.05.2005

библиотека BOOST C++ http://www.boost.org
перевод Elijah Koziev www.solarix.ru

  © Mental Computing 2010