Я пытаюсь использовать класс Eigen внутри контейнера данных (Data<T>
с T
начала Eigen::Matrix<...>
). В какой-то момент класс Data<>
пытается вызвать operator>>(std::istringstream, Eigen::Matrix<...>)
, что не удается, потому что этот оператор не определен.
Я реализовал его сам, в нескольких вариантах (на основе шаблонов и на основе шаблонов). Это мои испытания:
std::istringstream &operator>>(std::istringstream &str, Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &t)
{
return str;
}
template <typename T>
std::istringstream &operator>>(std::istringstream &str, Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> t)
{
return str;
}
std::istringstream &operator>>(std::istringstream &str, Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic> t)
{
return str;
}
std::istringstream &operator>>(std::istringstream &str, Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic> &t)
{
return str;
}
std::istringstream &operator>>(std::istringstream &str, Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> &t)
{
return str;
}
std::istringstream &operator>>(std::istringstream &str, Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> t)
{
return str;
}
Я не хочу ничего делать внутри оператора, по крайней мере сейчас. По сути, библиотека выполняет чтение файла xml и создание соответствующего объекта внутри Data<>
, вызывающего оператор >>, но мне это не нужно, поэтому пустая реализация.
Тем не менее, компилятор жалуется, что не может найти оператора со следующей ошибкой:
SofaFramework/sofa/core/objectmodel/Data.h:553:10: error: no match for ‘operator>>’ (operand types are ‘std::istringstream’ {aka ‘std::__cxx11::basic_istringstream<char>’} and ‘Eigen::Matrix<double, -1, -1>’)
In file included from /usr/include/c++/9.3.0/sstream:38
Я не уверен, что здесь может быть не так. Есть идеи, что происходит?