在下面的代碼Boost library:作用get_unit_value的升壓ODEINT
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);
}
的get_unit_value
的作用我不清楚。它有什麼作用?我們傳遞一些東西給它,並返回相同的值。爲什麼有人要把它包裝成一個結構?除了減慢運行時間之外,它還能做什麼嗎?
此代碼是從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;
};
運行時不應該由該模板的影響。優化器應該完全消除它。 – headmyshoulder 2015-02-10 14:52:24