[C ++在继承的类中访问运算符

问题描述 投票:0回答:2

我目前正在编写一个应用程序,其中我将本征库用于复杂的3D数学。因为我需要不同的点和向量类,所以我的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]等。我认为它的操作方式是使用a

double Eigen::Vector4d::operator[](unsigned int index){...}

功能。

我不知道在派生类中将如何访问这些数据。我需要做什么才能访问该函数中的数据,以便可以写入x,y,z值?

c++ inheritance eigen
2个回答
0
投票

您可以做

(*this)[0]

以此类推,以调用基类operator[]


0
投票

xyz不是Eigen::Vector4d的成员变量,而是方法。您可以使用this->x()等(或Vector4d::x())从派生类访问它们。也可以使用(*this)[0](*this)(0)。如果您需要在课堂上频繁访问x()y()z(),则可以编写一次:

using Vector4d::x;
using Vector4d::y;
using Vector4d::z;

然后仅使用x()y()z()访问它们。但是,这可能会导致一些阴影冲突(如果以相同的方式命名局部变量)。

© www.soinside.com 2019 - 2024. All rights reserved.