Следует отметить, что Eigen::MatrixBase<std::complex<...> >
не является допустимым типом, поскольку MatrixBase
является базовым классом CRTP. Например, Matrix<double,2,2>
наследует (косвенно) от MatrixBase<Matrix<double,2,2> >
и т. Д. Однако каждый MatrixBase
предоставляет тип Scalar
, который можно проверить с помощью SFINAE (т. Е. С помощью std::enable_if
):
template <class Derived>
typename std::enable_if<Eigen::NumTraits<typename Derived::Scalar>::IsComplex, void>::type
myFunction(const Eigen::MatrixBase<Derived>& matrix) {
std::cout << "Passed complex\n";
}
template <class Derived>
typename std::enable_if<!Eigen::NumTraits<typename Derived::Scalar>::IsComplex, void>::type
myFunction(const Eigen::MatrixBase<Derived>& matrix) {
std::cout << "Passed non-complex\n";
}
Godbolt-Demo: https://godbolt.org/z/Q9YlPz