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

Compile Time log2 Calculation

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
{
  typedef implementation-defined static_log2_argument_type;
  typedef implementation-defined static_log2_result_type;
  template <static_log2_argument_type arg>
  struct static_log2
  {
    static const static_log2_result_type value = implementation-defined;
  };
  template < >
  struct static_log2< 0 >
  {
    // The logarithm of zero is undefined.
  };
}  // namespace boost

Шаблон класса<boost::static_log2>принимает один параметр шаблона, значение типа<static_log2_argument_type>. Шаблон определяет только один элемент,<value>, который дает усеченный, базовый логарифм аргумента шаблона.

Поскольку логарифм нуля для любого основания не определен, существует специализация<static_log2>для шаблонного аргумента нуля. Эта специализация не имеет членов, поэтому попытка использовать логарифм «база-два» нуля приводит к ошибке времени компиляции.

Примечание:

  • <static_log2_argument_type>являетсянеподписанным целым числом(стандарт C++, 3.9.1p3).
  • <static_log2_result_type>являетсяцелым типом(стандарт C++, 3.9.1p7).

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

Логарифм основание-два (двоичный), сокращенно lb, иногда используется для придания упорядоченности компьютерным алгоритмам. Усеченный логарифм можно считать самой высокой мощностью из двух в значении, которое соответствует самому высокому биту набора значения (для двоичных целых чисел). Иногда в общем программировании можно использовать положение с наивысшим битом, которое требует, чтобы положение было доступно статически, т.е.во время компиляции.

Оригинальная версия шаблона класса бинарных логарифмов Boost была написанаДэрилом Уокером, а затем дополнена Джованни Баджо с поддержкой компиляторов без частичной специализации шаблонов. Нынешняя версия была предложена вместе со справочной реализацией Vesa Karvonen. Геннаро Прота написал настоящий исходный файл.


PrevUpHomeNext

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




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



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


реклама


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

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