80ffd42077
[SVN r45390]
73 lines
2.1 KiB
C++
73 lines
2.1 KiB
C++
// 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);
|
|
}
|
|
}
|