2016-08-16 81 views
0

我应该如何更改我的代码以正确重载vector_space_norm_inf以实现自定义状态类型?boost :: odeint扣除/替换失败

template<typename T> 
class Traits{ 
public: 
    typedef T value_t; 
    typedef complex<value_t> scalar_t; 
    typedef vector<scalar_t> state_t; 
} 

using namespace boost; 
using namespace numeric; 
using namespace odeint; 

template<typename T> 
struct vector_space_norm_inf<typename Traits<T>::state_t>{ 
    typedef typename Traits<T>::value_t result_type; 
    typedef typename Traits<T>::scalar_t scalar_t; 
    typedef typename Traits<T>::state_t state_t; 

    result_type operator()(const state_t& x) const{ 
    auto comparator=[](const scalar_t& x1, const scalar_t& x2){ 
     return std::abs(x1)<std::abs(x2); 
    }; 
    auto result=std::max_element(x.begin(),x.end(),comparator); 
    result_type maxElement=std::abs(*result); 
    return maxElement; 
    } 
}; 

问题是我尝试从相关范围推导出模板参数。我明白,这是不可能的,我在这里问一些想法如何改变我的代码,以避免它。

+0

你想专门针对具有特质课堂上的一切? – headmyshoulder

回答

0

只要不使用你的Traits类模板 - 用你想要什么state_t是直接:

namespace boost { namespace numeric { namespace odeint { 
    template<typename T> 
    struct vector_space_norm_inf<vector<complex<T>>> { 
     ... 
    }; 
}}}