![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
The MPL Reference Manual: MetafunctionsBoost , ,
|
Front Page / Metafunctions |
The MPL includes a number of predefined metafunctions that can be roughly classified in two categories: general purpose metafunctions, dealing with conditional type selection and higher-order metafunction invocation, composition, and argument binding, and numeric metafunctions, incapsulating built-in and user-defined arithmetic, comparison, logical, and bitwise operations.
Учитывая, что можно выполнять целочисленные численные вычисления во время компиляции с использованием обычной нотации операторов, необходимость во второй категории может быть неочевидна, но на самом деле она играет центральную роль в создании программирования с MPL, казалось бы, без усилий. В частности, есть по крайней мере два контекста, в которых встроенные языковые средства не подходят.:
Второй вариант использования заслуживает особого внимания. В отличие от встроенной, строго целочисленной компиляционной арифметики, числовые метафункции MPL являютсяполиморфными, с поддержкойарифметики смешанного типа.. Это означает, что они могут оперировать различными числовыми типами — например, рациональными, фиксированными или сложными числами — и что в целом вам разрешено свободно смешивать эти типы в одном выражении. Видишь?Концепция численной метафункциидля более подробной информации о цифровой инфраструктуре MPL.
Для уменьшения отрицательного синтаксического воздействия нотации метафункций на нотацию инфикса оператора все числовые метафункции позволяют передавать до N аргументов, где N определяется значениемBOOST_MPL_LIMIT_METAFUNCTION_ARITY.Макроконфигурация.
[3] | Если оставить в стороне все остальные соображения, то на момент написания этой статьи (начало 2004 года) использование встроенных операторов на интегральных константах по-прежнему часто представляет проблему переносимости — многие компиляторы не могут обрабатывать конкретные формы выражений, заставляя нас использовать условную компиляцию. Поскольку числовые метафункции MPL работают на типах и инкапсулируют эти обходные пути внутри, они ускользают от этих проблем, поэтому, если вы стремитесь к переносимости, обычно рекомендуется использовать их вместо обычных операторов, даже по цене немного сниженной читаемости. |
Статья The MPL Reference Manual: Metafunctions раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |