Use static data initializers inline

82 Views Asked by At

I have found this section in the cpp_dec_float source file:

struct initializer
  {
     initializer()
     {
        cpp_dec_float<Digits10, ExponentType, Allocator>::nan();
        cpp_dec_float<Digits10, ExponentType, Allocator>::inf();
        (cpp_dec_float<Digits10, ExponentType, Allocator>::min)();
        (cpp_dec_float<Digits10, ExponentType, Allocator>::max)();
        cpp_dec_float<Digits10, ExponentType, Allocator>::zero();
        cpp_dec_float<Digits10, ExponentType, Allocator>::one();
        cpp_dec_float<Digits10, ExponentType, Allocator>::two();
        cpp_dec_float<Digits10, ExponentType, Allocator>::half();
        cpp_dec_float<Digits10, ExponentType, Allocator>::double_min();
        cpp_dec_float<Digits10, ExponentType, Allocator>::double_max();
        cpp_dec_float<Digits10, ExponentType, Allocator>::long_double_max();
        cpp_dec_float<Digits10, ExponentType, Allocator>::long_double_min();
        cpp_dec_float<Digits10, ExponentType, Allocator>::long_long_max();
        cpp_dec_float<Digits10, ExponentType, Allocator>::long_long_min();
        cpp_dec_float<Digits10, ExponentType, Allocator>::ulong_long_max();
        cpp_dec_float<Digits10, ExponentType, Allocator>::eps();
        cpp_dec_float<Digits10, ExponentType, Allocator>::pow2(0);
     }
     void do_nothing(){}
  };

I'd like to use some of those values such as zero, one, two, and half rather than declaring global const variables.

Is it possible to use those values inline? If so, how?

Example:

#include <boost/multiprecision/number.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <iostream>

namespace mp = boost::multiprecision;

int main()
{
    typedef mp::number<mp::cpp_dec_float<100>> mp_type;
    mp_type test_num("7.0710678");

    test_num *= mp_type.two();

    std::cout << test_num.str( 0, std::ios_base::scientific ) << '\n';
}
1

There are 1 best solutions below

0
On BEST ANSWER

boost::multiprecision::number repeats its first template argument as a public member type backend_type. So,

test_num = test_num * mp_type::backend_type::two();