在两个相同基类的多重继承中,如何将其转换为其中一个

1 c++ inheritance const this

我有一个派生自两个相同基础的类:

class Vector3d {...};
class Position:public Vector3d {...};
class Velocity:public Vector3d {...};

class Trajectory:public Position, public Velocity
{
    Vector3d &GetPosition(void);
    Vector3d &GetVelocity(void);
};
Run Code Online (Sandbox Code Playgroud)

我想在派生类中有一个成员函数来快速转换为一个或另一个基类.我在想的是:

Vector3d &GetPosition(void) const
{
    return static_cast<const Vector3d &>(*this);
}
Run Code Online (Sandbox Code Playgroud)

但我从编译器收到一条消息:"用'const Position'初始化的引用,需要'Vector3d'类型的左值"

我用的时候:

const Vector3d &GetPosition(void) const
{
    return static_cast<const Vector3d &>(*this);
}
Run Code Online (Sandbox Code Playgroud)

事情编译好,但我不能以我想要的方式使用它:

Trajectory t;
t.Position=Set(20,30,50);
Run Code Online (Sandbox Code Playgroud)

因为t.Position是const,因此是一个不合适的左值,正如编译器宣布的那样.

关于如何将基类引入非常量解除引用的任何想法?

Jar*_*d42 5

你可能会这样做

class Trajectory:public Position, public Velocity
{
public:
    Vector3d &GetPosition() { return static_cast<Position&>(*this); }
    Vector3d &GetVelocity() { return static_cast<Velocity&>(*this); }
};
Run Code Online (Sandbox Code Playgroud)

演示

但使用组合而不是继承似乎更合适.

class Trajectory
{
public:
    const Position& GetPosition() const { return position; }
    Position& GetPosition() { return position; }
    const Velocity& GetVelocity() const { return velocity; }
    Velocity& GetVelocity() { return velocity; }
private:
    Position position;
    Velocity velocity;
};
Run Code Online (Sandbox Code Playgroud)