2016-08-11 31 views
0

我正在为多项式写一些模板函数。他们将输入一个多项式,例如,多项式类型的数字类型

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

polynomial类可以只是std::vector<T>,在这种情况下,我想xT型,或其他自定义多项式类。

什么是定义此模板化函数的正确方法。 我遇到问题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; 
}  

你缺少一个很少有typename s让编译器知道表达式,例如p::value_type实际上是类型。

+0

我明白了。这就是Jarod42所说的,这也是我遇到麻烦的原因之一。谢谢。 – myfirsttime1

相关问题