В настоящее время я пишу приложение, в котором я использую Eigen-Library для сложных 3D-Math. Поскольку мне требовались разные точечные и векторные классы, мой point3d-класс выглядит следующим образом:
class point3d : public Eigen::Vector4d
{
public:
point3d(){}
point3d(double x, double y, double z) : Eigen::Vector4d(x, y, z, 1) {}
void fromString(std::string input);
};
Теперь я хочу создать функцию-член этого класса, которая позволит мне анализировать строки OBJ-файлов, которые выглядят как это:
v 2.8 0.52 10.18
в качестве такой точки. Вот как я намереваюсь разработать свою функцию синтаксического анализа
void point3d::fromString(std::string input)
{
char* buf = strdup(input.c_str());
if (strtok(buf, " ") == "v")
{
;
strtok(buf, " ");
this-x = std::stod(strtok(buf, " "));
this->y = std::stod(strtok(buf, " "));
this->z = std::stod(strtok(buf, " "));
}
}
Моя проблема в том, что Eigen не позволяет мне получить доступ к данным, хранящимся в Vector4d, как this-> x, this-y, this-> z и скоро. Вместо этого вы обычно получаете доступ к нему как Vector4d v; v [0], v [1], v [2] et c. Я думаю, что это происходит с помощью функции
double Eigen::Vector4d::operator[](unsigned int index){...}
.
Я не знаю, как именно можно получить доступ к этим данным в производном классе. Что мне нужно сделать, чтобы получить доступ к этим данным в этой функции, чтобы я мог записать значения x, y, z?