多项式类型的数字类型
问题描述:
我正在为多项式写一些模板函数。他们将输入一个多项式,例如,多项式类型的数字类型
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
和类型的返回类型可能要定义的猜测,但他们似乎并不正确。
答
你或许应该多放一些想进入制约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
'typename polynomial :: value_type'。 – Jarod42