II хотел бы использовать Eigen для линейной алгебры в проекте геометрии, над которым я сейчас работаю. Это отличная библиотека, относительно небольшая и простая в использовании и достаточно популярная.Использование Eigen :: Модуль геометрии с пользовательским скалярным типом
Тем не менее, я также хотел бы использовать пользовательский определенный класс «Двойной», чтобы иметь возможность сравнивать два значения с плавающей запятой в компьютерной точности (что-то вроде разницы между ними должно быть меньше заданной точности). Для моего настраиваемого типа я реализовал большинство функций std :: math C++ 11 и всех операторов (включая унарные, конью, imag, abs2 ...). Я сделал все, перечисленное в этих ссылках:
http://eigen.tuxfamily.org/dox-devel/TopicCustomizingEigen.html
https://forum.kde.org/viewtopic.php?f=74&t=26631
Однако, я все еще получаю ошибку компиляции в Эйгене Jacobi.h файл, а точнее на линии 340,341, которые являются:
x[i] = c * xi + numext::conj(s) * yi;
y[i] = -s * xi + numext::conj(c) * yi;
Я получаю следующую ошибку от компилятора (Vs 2012, Win32, Release и Debug Configuration)
eigen\src/Jacobi/Jacobi.h(341): error C3767: '*': candidate function(s) not accessible
оператор *, это определить в моем пользовательском типе для следующих случаев:
CustomType operator*(CustomType const &_other);
CustomType operator*(double const &_other);
double operator*(CustomType const &_other);
Я попытался определить CONJ следующих способов:
CustomType conj(CustomType const &_type){return _type;}
double conj(customType const &_type){return _type.get();}
Я попытался определением CONJ в Эйгене :: numext пространство имен а также в моем пространстве имен CustomType без успеха. У кого-нибудь есть подсказка, ссылка, предложение или знать что-то. Собственные потребности, которые я, возможно, забыл?
Впечатляет, я полностью пропустил это. Ну, это немного «поздно», но это хороший ответ. – ahesa