对于一个多项式方程求解器来说,将其模板化以适应任何类型会非常好:
template <class number, int degree>
class PolynomialEquation
{
public:
private:
array<number, degree+1> myEquation;
array<complex<number>, degree> equationResult;
};
这使得例如在 ℝ 中使用 double
作为输入,并且结果在 ℂ 中是std::complex<double>
,(我们知道从二次及以上的程度时,解通常会落入 ℂ, 比如:x^2+1)。
但是,方程的输入也可以是一个 std::complex
。在这种情况下,myEquation
的类型应该是复数类型,但是 equationResult
不应该是 std::complex<complex<T>>
,而只是一个普通类型为 T
的复数。
问题:
如何使当给方程提供 std::complex
时,equationResult
的类型成为 std::complex
的子类型?
是否有类似于 std::is_floating_point 的 std::is_complex_number 相关函数?
poly_root_type_traits
或类似的名称 -to_complex
对于这个东西背后的基本原理有点不清楚。 - Matteo Italia