Đối với một giải phương trình đa thức, nó sẽ là tuyệt vời để template nó có bất kỳ loại có sẵn:Làm thế nào để tránh nhúng `std :: complex` khi cung cấp` T = std :: complex <Q> `?
template <class number, int degree>
class PolynomialEquation
{
public:
private:
array<number, degree+1> myEquation;
array<complex<number>, degree> equationResult;
};
này cho phép, ví dụ, double
trong ℝ được sử dụng cho đầu vào, và kết quả là std::complex<double>
trong ℂ (chúng ta biết rằng từ mức độ 2 trở lên, giải pháp cho phương trình thường rơi vào ℂ, ví dụ: x^2 + 1).
Nhưng, đầu vào cho phương trình cũng có thể là std::complex
. Trong trường hợp này, loại myEquation
phải phức tạp, nhưng equationResult
KHÔNG được là std::complex<complex<T>>
, nhưng chỉ là số phức hợp bình thường của loại T
.
Câu hỏi:
Làm thế nào để làm cho các loại equationResult
là sub-type của std::complex
khi phương trình được cung cấp với std::complex
?
Có một số std::is_floating_point
tương đương như tiêu chuẩn :: is_complex_number?
Có lẽ tôi sẽ gọi nó là 'poly_root_type_traits' hoặc một cái gì đó tương tự -' to_complex' là một chút không rõ ràng về lý do đằng sau điều này. –