Шаблоны в <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 | Самый маленький встроенный беззнаковый целый тип, для которого заданная величина является максимальной. Параметр шаблона должен быть положительным числом. |
###include <boost/integer.hpp>
//...
int main()
{
boost::int_t<24>::least my_var;
//..}
Программа 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