gpt4 book ai didi

c++ - get_unit_value 在 boost ODEINT 中的作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:34 26 4
gpt4 key购买 nike

在以下代码中来自 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);
}

我不清楚 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;
};

最佳答案

您忘记复制其中一个专业:

template<class T , class Enabler = void >
struct get_unit_value_impl
{
static T value(const T &t)
{
return t;
}
typedef T result_type;
};

#ifndef __CUDACC__
template<class Unit , class T>
struct get_unit_value_impl< boost::units::quantity< Unit , T> >
{
static T value( const boost::units::quantity< Unit , T> &t )
{
return t.value();
}
typedef T result_type;
};
#endif

要点get_unit_value()是接受一个值并返回它,或者一个 boost::unit::quantity<Unit, T>并返回它的值(value)。这样,调用者就不需要担心是否 t 了。只是一个 int或者更复杂的东西:

int x = 7;
quantity<length> L = 2.0*meters;

get_unit_value(x); // 7
get_unit_value(L); // 2.0

关于c++ - get_unit_value 在 boost ODEINT 中的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28431213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com