123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- // 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)
- /**
- \file
-
- \brief conversion.cpp
- \details
- Test explicit and implicit unit conversion.
- Output:
- @verbatim
- //[conversion_output_1
- L1 = 2 m
- L2 = 2 m
- L3 = 2 m
- L4 = 200 cm
- L5 = 5 m
- L6 = 4 m
- L7 = 200 cm
- //]
- //[conversion_output_2
- volume (m^3) = 1 m^3
- volume (cm^3) = 1e+06 cm^3
- volume (m^3) = 1 m^3
- energy (joules) = 1 J
- energy (ergs) = 1e+07 erg
- energy (joules) = 1 J
- velocity (2 m/s) = 2 m s^-1
- velocity (2 cm/s) = 0.02 m s^-1
- //]
- @endverbatim
- **/
- #include <iostream>
- #include <boost/units/io.hpp>
- #include <boost/units/pow.hpp>
- #include <boost/units/systems/cgs.hpp>
- #include <boost/units/systems/cgs/io.hpp>
- #include <boost/units/systems/si.hpp>
- #include <boost/units/systems/si/io.hpp>
- using namespace boost::units;
- int main()
- {
- // test quantity_cast
- {
- // implicit value_type conversions
- //[conversion_snippet_1
- quantity<si::length> L1 = quantity<si::length,int>(int(2.5)*si::meters);
- quantity<si::length,int> L2(quantity<si::length,double>(2.5*si::meters));
- //]
-
- //[conversion_snippet_3
- quantity<si::length,int> L3 = static_cast<quantity<si::length,int> >(L1);
- //]
-
- //[conversion_snippet_4
- quantity<cgs::length> L4 = static_cast<quantity<cgs::length> >(L1);
- //]
-
- quantity<si::length,int> L5(4*si::meters),
- L6(5*si::meters);
- quantity<cgs::length> L7(L1);
-
- swap(L5,L6);
-
- std::cout << "L1 = " << L1 << std::endl
- << "L2 = " << L2 << std::endl
- << "L3 = " << L3 << std::endl
- << "L4 = " << L4 << std::endl
- << "L5 = " << L5 << std::endl
- << "L6 = " << L6 << std::endl
- << "L7 = " << L7 << std::endl
- << std::endl;
- }
-
- // test explicit unit system conversion
- {
- //[conversion_snippet_5
- quantity<si::volume> vs(1.0*pow<3>(si::meter));
- quantity<cgs::volume> vc(vs);
- quantity<si::volume> vs2(vc);
-
- quantity<si::energy> es(1.0*si::joule);
- quantity<cgs::energy> ec(es);
- quantity<si::energy> es2(ec);
-
- quantity<si::velocity> v1 = 2.0*si::meters/si::second,
- v2(2.0*cgs::centimeters/cgs::second);
- //]
-
- std::cout << "volume (m^3) = " << vs << std::endl
- << "volume (cm^3) = " << vc << std::endl
- << "volume (m^3) = " << vs2 << std::endl
- << std::endl;
-
- std::cout << "energy (joules) = " << es << std::endl
- << "energy (ergs) = " << ec << std::endl
- << "energy (joules) = " << es2 << std::endl
- << std::endl;
-
- std::cout << "velocity (2 m/s) = " << v1 << std::endl
- << "velocity (2 cm/s) = " << v2 << std::endl
- << std::endl;
- }
- return 0;
- }
|