Можно ли относиться к индексам массива как к элементам структуры? - PullRequest
0 голосов
/ 06 марта 2011

Итак, у меня есть эта структура, состоящая из трех NSPoint-структур.

typedef struct AOTriangle_ {
    NSPoint a;
    NSPoint b;
    NSPoint c;
} AOTriangle;

Я хотел бы в некоторых случаях ссылаться на точки как a, b, c и другие случаи как на индексы в массиве.

Как и так,

AOTriangle t;
t.a = NSMakePoint(0,0);
t.b = NSMakePoint(3,0);
t.c = NSMakePoint(0,4);

for(int i = 0; i < 3; ++i) {
    t[i].x += 5.0;
    t[i].y += 5.0;
}

Это самое близкое, что я получил, но вы можете видеть, что это не то, что я хотел.Есть ли способ сделать это в Objective-C?Является ли лучший способ, чем то, что я делаю ниже, сделать нечто подобное - может быть, с помощью союза?

typedef struct AOTriangle_ {
    NSPoint a;
    NSPoint b;
    NSPoint c;
} AOTriangle;


AOTriangle t;
t.a = NSMakePoint(0,0);
t.b = NSMakePoint(3,0);
t.c = NSMakePoint(0,4);
NSPoint* t = (NSPoint*)&triangle;
for(int i = 0; i < 3; ++i) {
    t[i].x += 5.0;
    t[i].y += 5.0;
}

1 Ответ

3 голосов
/ 06 марта 2011

Да, вы можете использовать « union ». Я считаю, что декларация будет выглядеть примерно так:

typedef struct AOTriangle_ {
    union {
        struct {
            NSPoint a;
            NSPoint b;
            NSPoint c;
        };
        NSPoint points[3];
    };
} AOTriangle;

A union - это, по сути, способ сказать: «Я могу называть членов этой структуры либо a, b, либо c, либо points[0], points[1] или points[2] ".

И вы бы использовали это так:

AOTriangle t;
t.a = NSMakePoint(0,0);
t.b = NSMakePoint(3,0);
t.c = NSMakePoint(0,4);
for(int i = 0; i < 3; ++i) {
    t.points[i].x += 5.0;
    t.points[i].y += 5.0;
}
...