![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
THE BOOST MPL LIBRARY: Representing QuantitiesBoost , ,
|
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Dimensional Analysis / Representing Quantities |
Перечисленные выше типы по-прежнему являются чистыми метаданными; чтобы проверить реальные вычисления, нам нужно каким-то образом привязать их к нашим данным времени выполнения. Простая обертка с числовым значением, параметризованная по типу номераTи по своим размерам соответствует счету:
template <class T, class Dimensions> struct quantity { explicit quantity(T x) : m_value(x) {} T value() const { return m_value; } private: T m_value; };
Теперь у нас есть способ представления чисел, связанных с размерами. Например, мы можем сказать:
quantity<float,length> l( 1.0f ); quantity<float,mass> m( 2.0f );
Обратите внимание, чтоРазмерынигде не встречается в определенииколичествовне списка параметров шаблона; еготолькороль состоит в том, чтобы гарантировать, чтоlиmимеют разные типы. Из-за этого мы не можем совершить ошибку, назначив длину массе:
m = l; // compile-time type error
Статья THE BOOST MPL LIBRARY: Representing Quantities раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |