2016-08-16 13 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>>> { 
     ... 
    }; 
}}} 
関連する問題