namespaceboost{typedefimplementation-definedstatic_log2_argument_type;typedefimplementation-definedstatic_log2_result_type;template<static_log2_argument_typearg>structstatic_log2{staticconststatic_log2_result_typevalue=implementation-defined;};template<>structstatic_log2<0>{// The logarithm of zero is undefined.};}// namespace boost
Шаблон класса<boost::static_log2>принимает один параметр шаблона, значение типа<static_log2_argument_type>. Шаблон определяет только один элемент,<value>, который дает усеченный, базовый логарифм аргумента шаблона.
Поскольку логарифм нуля для любого основания не определен, существует специализация<static_log2>для шаблонного аргумента нуля. Эта специализация не имеет членов, поэтому попытка использовать логарифм «база-два» нуля приводит к ошибке времени компиляции.
Программаstatic_log2_test.cppпредставляет собой упрощенную демонстрацию результатов от инстанцирования различных примеров шаблона класса двоичного логарифма.
Логарифм основание-два (двоичный), сокращенно lb, иногда используется для придания упорядоченности компьютерным алгоритмам. Усеченный логарифм можно считать самой высокой мощностью из двух в значении, которое соответствует самому высокому биту набора значения (для двоичных целых чисел). Иногда в общем программировании можно использовать положение с наивысшим битом, которое требует, чтобы положение было доступно статически, т.е.во время компиляции.
Оригинальная версия шаблона класса бинарных логарифмов Boost была написанаДэрилом Уокером, а затем дополнена Джованни Баджо с поддержкой компиляторов без частичной специализации шаблонов. Нынешняя версия была предложена вместе со справочной реализацией Vesa Karvonen. Геннаро Прота написал настоящий исходный файл.
Статья Compile Time log2 Calculation раздела Boost.Integer Boost.Integer может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.