Не могу найти оператор >> (std :: istringstream, Eigen), хотя я определяю его - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь использовать класс 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

Я не уверен, что здесь может быть не так. Есть идеи, что происходит?

...