Метапрограммирование на C++: целочисленные типы заданного размера в BOOST C++

 

Постановка задачи

Любой, кто сталкивался с программированием для Windows API, обнаруживал странные типы ULONG, DWORD и так далее, которые фигурируют в разных функциях API там и сям. Надо иметь достаточно долгий опыт программирования под Windows, чтобы знать один простой факт: необходимость в этом мусоре (а как еще назвать введение в глобальное пространство имен неких типов, необходимость которых там сомнительна?) возникла после перехода от 16-разрядного API MS Windows 3.1 к 32-разрядному API Windows NT 3.1.

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

Есть, однако, случаи, когда объявления переменной типа int или long слишком неопределенно - это низкоуровневое программирование, либо случаи, когда выполняется разрабатываемая программа оперирует таким большим объемом данных, что программист хочет точно определится с размером структур данных. Стандарт C/C++ оставляет такие вопросы, как размер типа int, на откуп разработчиков компиляторов, поэтому лишь крайне наивный программист может считать, что short int это всегда 16-битовое целое. К примеру, компилятор GNU GCC определяет тип wchar_t как 4-байтовое, а подавляющее большинство компиляторов для платформы Windows - как 16-битовое.

Про знаковые/беззнаковые символьные типы знает гораздо больше программистов - это постоянный источник ошибок, стоит только попробовать использовать код символа в качестве индекса для доступа к элементам массива.

 

Решение

Библиотека BOOST C++ предлагает простое (для нас, пользователей этой замечательной библиотеки) решение - оно запрятано в подбиблиотеке с незамысловатым названием integer. Включив в программу заголовочный файл <boost/cstdint.hpp>, можно использовать следующие типы:

Беззнаковые:

boost::uint8_t

boost::uint16_t

boost::uint32_t

Знаковые:

boost::int8_t

boost::int16_t

boost::int32_t

 

  © Mental Computing 2009  main page  rss  email  icq  download