2016-08-11 5 views
0

多項式用のテンプレート関数をいくつか書いています。 多項式を入力します。多項式の数値型

template<typename polynomial> 
auto evaluate(polynomial const& pol, polynomial::value_type x) -> dectype(pol[0]) 
{ 
    // return Horner-Ruffini 
}; 

polynomialクラスがちょうどstd::vector<T>、私はxはタイプT、またはその他のカスタム多項式クラスのものにしたい場合にすることができます。

このテンプレート機能を定義する正しい方法は何ですか。 ケースpolynomial = std::vector<double>の場合、正しく書込みできません。

注:上記のコードには、xのタイプと戻り値のタイプを定義する必要があるかもしれないが、正しいとは思われません。

+0

'typename polynomial :: value_type'。 – Jarod42

答えて

2

あなたはおそらくタイプpの制約に考えていくつかのより多く配置する必要があります(つまり、それが許容value_typeメンバーなどを想定している)が、これはあなたのstd::vectorケースのために働く:

#include <vector> 
#include <iostream> 

template<typename p> 
typename p::value_type evaluate(p const& pol, typename p::value_type x) {                           
    typename p::value_type result = 0; 
    for (const auto& v : pol) { 
    result = result * x + v; 
    } 
    return result; 
} 

int main() { 
    std::vector<double> test{1, 2, 3, 4}; 
    std::cout << evaluate(test, 5.0) << std::endl; 
}  

あなたが不足していますコンパイラにp::value_typeのような式を知らせるためには、実際にはtypenameがほとんどありません。

+0

私は参照してください。それがJarod42が言っていたことであり、それが私が問題を抱えていた理由の1つです。ありがとうございました。 – myfirsttime1