typedef 使用不同的类型名称更改值名称

typedef changing value names with different type names

本文关键字:类型 typedef      更新时间:2023-10-16

如果我有:

typedef struct Foo {
    int x, y;
} Point, SomethingElse;

我希望Foo.x等于Point.x但我希望SomethingElse.a也等于Point.x,或者换句话说,我希望SomethingElseFooPoint完全相同,但它的两个变量命名为其他事物。如果我必须制作一个全新的结构,这似乎是一种浪费。

如果不需要为不同类型的变量名强制执行不同的变量名称,那么使用联合呢?

typedef struct Foo
{
    union
    {
        int a;
        int x;
    };
    union
    {
        int b;
        int y;
    };
} Point, SomethingElse;

您可以改为将变量视为对象中的数组,并使用数组运算符使用具有所需名称的变量检索值。

struct example{
  int data[2];
  int& operator[](int index){
    //range check index before lookup if desired
    return data[index];
  }
};
int X=0;
int Y=1;
int A=0;
int B=1;
typedef example Point;
typedef example SomethingElse;

int main(int argc,char** argv){
  Point p;
  SomethingElse s;
  p[X]=0;
  s[A]=0;

  return 0;
}

这是您可以执行类似请求的操作的一种方法,但我建议使用每个结构中所需的名称声明唯一的结构,而不是尝试为结构中的变量名称提供别名。只声明第二个结构似乎不那么令人头疼。

你有 3 个不同的 typdef,它们是在一个语句中声明的标识结构。 SomethingElse没有名为 a 的成员。

也许你想要一个typedef union