In the following code from Boost library:
template<class T , class Enabler = void >
struct get_unit_value_impl
{
static T value(const T &t)
{
return t;
}
typedef T result_type;
};
...
template<class T>
typename detail::get_unit_value_impl<T>::result_type get_unit_value(const T &t)
{
return detail::get_unit_value_impl<T>::value(t);
}
The role of get_unit_value
is unclear to me. What does it do? we pass something to it and it returns the same value. Why should someone wrap it into a structure? Does it do anything except for slowing down the run time?
This code is called from here:
template< class Fac1 = double >
struct rel_error
{
const Fac1 m_eps_abs , m_eps_rel , m_a_x , m_a_dxdt;
rel_error( Fac1 eps_abs , Fac1 eps_rel , Fac1 a_x , Fac1 a_dxdt )
: m_eps_abs( eps_abs ) , m_eps_rel( eps_rel ) , m_a_x( a_x ) , m_a_dxdt( a_dxdt ) { }
template< class T1 , class T2 , class T3 >
void operator()( T3 &t3 , const T1 &t1 , const T2 &t2 ) const
{
using std::abs;
set_unit_value( t3 , abs( get_unit_value( t3 ) ) / ( m_eps_abs + m_eps_rel * ( m_a_x * abs( get_unit_value( t1 ) ) + m_a_dxdt * abs( get_unit_value( t2 ) ) ) ) );
}
typedef void result_type;
};