У меня есть шаблон Matrix
класса, и я использовал std::vector<std::vector<T>>
для хранения данных. Мне нужно специализировать некоторые методы для std::complex
матрицы, например:
template <typename T>
bool Matrix<T>::is_hermitian() const
{
if (!(*this).is_squared())
return false;
for (int r = 0; r < rows_; r++)
for (int c = 0; c < columns_; c++)
if (mat[r][c] != mat[c][r])
return false;
return true;
}
Для специализированного метода я подумал что-то вроде этого:
template <typename T>
bool Matrix<std::complex<T> >::is_hermitian() const
{
if (!(*this).is_squared())
return false;
for (int r = 0; r < rows_; r++)
for (int c = 0; c < columns_; c++)
if (mat[r][c] != std::conj(mat[c][r]))
return false;
return true;
}
Но компилятор возвращает мне ошибку
'invalid use of incomplete type'
Я создал в конце файла .cpp
группу классов, которые я мог бы использовать в основной программе:
template class Matrix<int>;
template class Matrix<double>;
template class Matrix<float>;
template class Matrix< std::complex<float> >;
template class Matrix< std::complex<int> >;
Как реализовать один метод дляall std::complex<T>
type?
И если вы знаете, как заменить два последних экземпляра на Matrix< std::complex<T> >
, я буду очень благодарен.