如果我有:
typedef struct Foo {
int x, y;
} Point, SomethingElse;
我希望Foo.x
等于Point.x
,但我希望SomethingElse.a
也等于Point.x
,换句话说,我希望SomethingElse
成为Foo
与Point
和$(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;
});
});
完全相同,但其两个变量命名为其他内容。如果我必须制作一个全新的结构,这似乎是一种浪费。
答案 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
?