当我尝试编译以下代码时,会遇到错误
在“struct result_of_make_controlled >”的实例化中: 54:53:将“template typename result_of_make_controlled::type make_controlled(typename Stepper::value_type,typename Stepper::value_type,const Stepper&)”替换为Stepper =runge_kutta_dopri5所需 69:60:需要从这里开始 49:54:错误:在‘struct get_controller >’中没有名为“type”的类型 类型名称get_controller<步骤>::类型类型;
class explicit_error_stepper_fsal_base
{
public:
typedef double state_type;
typedef double value_type;
};
template<class State>
class runge_kutta_dopri5
: public explicit_error_stepper_fsal_base
{
public :
typedef explicit_error_stepper_fsal_base stepper_base_type;
typedef typename stepper_base_type::value_type value_type;//#
runge_kutta_dopri5( )
{ }
};
template< class Stepper > struct get_controller { };
// default controller factory
template< class Stepper , class Controller >
struct controller_factory
{
Controller operator()(
typename Stepper::value_type abs_error ,
typename Stepper::value_type rel_error ,
const Stepper &stepper )
{
return Controller( abs_error , rel_error , stepper );
}
};
template< class Stepper >
struct result_of_make_controlled
{
typedef typename get_controller< Stepper >::type type;
};
template< class Stepper >
typename result_of_make_controlled< Stepper >::type make_controlled(
typename Stepper::value_type abs_error ,
typename Stepper::value_type rel_error ,
const Stepper & stepper = Stepper() )
{
typedef Stepper stepper_type;
typedef typename result_of_make_controlled< stepper_type >::type controller_type;
typedef controller_factory< stepper_type , controller_type > factory_type;
factory_type factory;
return factory( abs_error , rel_error , stepper );
}
typedef double state_type;
typedef runge_kutta_dopri5<state_type> stepper_type;
typedef decltype(make_controlled(1E-10,1E-10,stepper_type())) controlled_stepper_type;
int main()
{
return 0;
}我假设它需要在结构type中查找一个名为get_controller的类型,而它是空的,并且会导致错误。我不明白的是,为什么在github boost库的原始源代码中,编译器方面没有问题?
发布于 2015-02-07 12:13:44
相关的boost报头为特定的步进者提供了get_controller的部分专门化。您的代码不会这样做。例如
template< class State , class Value , class Deriv , class Time , class Algebra , class Operations , class Resize >
struct get_controller< runge_kutta_dopri5< State , Value , Deriv , Time , Algebra , Operations , Resize > >
{
typedef runge_kutta_dopri5< State , Value , Deriv , Time , Algebra , Operations , Resize > stepper_type;
typedef controlled_runge_kutta< stepper_type > type;
};https://stackoverflow.com/questions/28381863
复制相似问题