C 中的Delphi绝对

Delphi absolute in C++

本文关键字:绝对 Delphi 中的      更新时间:2023-10-16

在C 中是否有与Delphi的absolute相等的?我想做以下操作:

// Structure A
struct A
{
  double X;
  double Y;
  double Z;
}
// Structure B
struct B : A
{
  double U absolute X;
  double V absolute Y;
  double W absolute Z;
}

我可以在structure B中使用double & U = X,但这将生成一个额外的指针并更改结构的大小。联合是 - 我认为 - 也不是解决方案,因为structure B继承了structure A

我真正想要的是通过访问x或u。

来访问同一内存

我喜欢用户2079303答案的想法,但要倒数。

注意 - 问题被命名为错误,并且违反了"您的真正目标"或"向我展示您的Z"规则。我们不需要模仿absolute关键字 - 这是完全胡说八道!我们想为记录属性制作假名,并互换使用它们。

我真正想要的是通过访问x或u。

来访问同一内存

引用的行是问题讨论问题本质的唯一行 - 制作完整的假名。

所以,让我们从User2079303停止的位置开始,并使用C工会不必命名的事实,就像它在https://stackoverflow.com/a/a/13624921/976391

中使用。

所以我们只是倒数范围。

/*union*/ struct coordinates {
    /*struct*/ union {
        double X;
        double U;
    };
    /*struct*/ union {
        double Y;
        double V;
    };
    /*struct*/ union {
        double Z;
        double W;
    };
};

简短版本:所描述的语言功能没有等效


长版C :

C 没有等效。您建议的成员参考为您提供了相同的语法,但确实增加了对象的大小。

另一个接近的替代方法是返回参考的成员函数。没有开销(假设在线扩展)。函数调用的语法与引用成员不同。但是也许与会员访问相同的语法并不重要,所以这就是我的建议。


长版C:

C中根本没有继承,因此也没有任何所描述的"绝对"。

我们有几种坐标。其中一些名为x,y,z其他(在另一个系统中)命名为u,v,w。

在此上下文的情况下,我建议一个联盟(编辑:最好交换联盟和结构关系,请参见https://stackoverflow.com/a/41148089/2079303):

union coordinates {
    struct {
        float x, y, z;
    } xyz;
    struct {
        float u, v, w;
    } uvw;
};

如果要互换使用XYZ和UVW,则可以让每个转换为另一个。

// forward declare
struct B;
struct A
{
  double X;
  double Y;
  double Z;
  operator B() const;
}
struct B
{
  double U;
  double V;
  double W;
  operator A() const;
}
A::operator B() const { B b; b.U = X; b.V = Y; b.W = Z; return b; }
B::operator A() const { A a; a.X = U; a.Y = V; a.Z = W; return a; }