typedef更改具有不同类型名称的值名称

时间:2016-05-21 06:26:25

标签: c++ struct typedef

如果我有:

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

我希望Foo.x等于Point.x,但我希望SomethingElse.a也等于Point.x,换句话说,我希望SomethingElse成为FooPoint$(function () { var overlay = $('<div id="overlay"></div>'); overlay.show(); overlay.appendTo(document.body); $(document).ready(function() { $('.popup').show(); $('.close').click(function(){ $('.popup').hide(); overlay.appendTo(document.body).remove(); return false; }); }); 完全相同,但其两个变量命名为其他内容。如果我必须制作一个全新的结构,这似乎是一种浪费。

3 个答案:

答案 0 :(得分:2)

如果不要求为不同类型强制使用不同的变量名,那么使用联合会怎么样?

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

答案 1 :(得分:1)

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

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;
}

这是你可以做某些事情的一种方式,但是我建议你在每个结构中使用你想要的名称来声明唯一的结构,而不是试图为结构中的变量名提供别名。声明第二个结构似乎不那么令人头疼。

答案 2 :(得分:0)

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

也许你想要一个typedef union