2016-08-16 86 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>>> { 
     ... 
    }; 
}}}