double および std::complex で機能するテンプレート クラスを作成しました。想定どおり、すべてのメソッドは .hpp ファイルにあります。1つを除くすべて。ある場所で double の 2 乗または std::complex のノルムを計算する必要があるため、メソッドを特殊化する必要がありました。「二重の特殊化」(A)についてより明示的に:
double a(2.0);
double b(0.0);
b = a*a;
「複雑な特殊化」 (B) の場合:
std::complex<double> a(2.0,3.0);
double b(0.0);
b = std::norm(a);
私の質問は次のとおりです。
double と complex の両方で機能する関数を使用して、これらの特殊化を回避する方法はありますか? ( std::norm は複雑な場合にのみ機能するため...)
または唯一の解決策は、特殊化 (A) の double a を複合体にキャストし、特殊化 (B) のみを一般的なテンプレートとして使用することです (二重と複合体の両方で機能します)。