123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // Boost.Units - A C++ library for zero-overhead dimensional analysis and
- // unit/quantity manipulation and conversion
- //
- // Copyright (C) 2003-2008 Matthias Christian Schabel
- // Copyright (C) 2008 Steven Watanabe
- //
- // Distributed under the Boost Software License, Version 1.0. (See
- // accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- #include <boost/units/base_dimension.hpp>
- #include <boost/units/base_unit.hpp>
- #include <boost/units/unit.hpp>
- #include <boost/units/quantity.hpp>
- //[runtime_conversion_factor_snippet_1
- using boost::units::base_dimension;
- using boost::units::base_unit;
- static const long currency_base = 1;
- struct currency_base_dimension : base_dimension<currency_base_dimension, 1> {};
- typedef currency_base_dimension::dimension_type currency_type;
- template<long N>
- struct currency_base_unit :
- base_unit<currency_base_unit<N>, currency_type, currency_base + N> {};
- typedef currency_base_unit<0> us_dollar_base_unit;
- typedef currency_base_unit<1> euro_base_unit;
- typedef us_dollar_base_unit::unit_type us_dollar;
- typedef euro_base_unit::unit_type euro;
- // an array of all possible conversions
- double conversion_factors[2][2] = {
- {1.0, 1.0},
- {1.0, 1.0}
- };
- double get_conversion_factor(long from, long to) {
- return(conversion_factors[from][to]);
- }
- void set_conversion_factor(long from, long to, double value) {
- conversion_factors[from][to] = value;
- conversion_factors[to][from] = 1.0 / value;
- }
- BOOST_UNITS_DEFINE_CONVERSION_FACTOR_TEMPLATE((long N1)(long N2),
- currency_base_unit<N1>,
- currency_base_unit<N2>,
- double, get_conversion_factor(N1, N2));
- //]
- int main() {
- boost::units::quantity<us_dollar> dollars = 2.00 * us_dollar();
- boost::units::quantity<euro> euros(dollars);
- set_conversion_factor(0, 1, 2.0);
- dollars = static_cast<boost::units::quantity<us_dollar> >(euros);
- set_conversion_factor(0, 1, .5);
- euros = static_cast<boost::units::quantity<euro> >(dollars);
- double value = euros.value(); // = .5
- if(value != .5) {
- return(1);
- } else {
- return(0);
- }
- }
|