首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >template<class Stepper>替换所需的

template<class Stepper>替换所需的
EN

Stack Overflow用户
提问于 2015-02-07 12:00:39
回答 1查看 755关注 0票数 0

当我尝试编译以下代码时,会遇到错误

在“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<步骤>::类型类型;

代码语言:javascript
复制
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库的原始源代码中,编译器方面没有问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-07 12:13:44

相关的boost报头为特定的步进者提供了get_controller的部分专门化。您的代码不会这样做。例如

代码语言:javascript
复制
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;
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28381863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档