2013-08-03 14 views
5

in Objective-C Sto iniziando a lavorare con CGPoints e quando ho bisogno di aggiungere due di loro il modo in cui lo sto facendo è questo:aritmetica su due CGPoints con + o - operatori

CGPoint p1 = CGPointMake(3, 3); 
CGPoint p2 = CGPointMake(8, 8); 
CGPoint p3 = CGPointMake(p2.x-p1.x, p2.y-p1.y); 

Mi piacerebbe essere in grado di fare solo:

CGPoint p3 = p2 - p1; 

È possibile?

+0

Sì, almeno in Xcode per iOS ottengo l'errore "operandi non validi per l'espressione binario ('CGPoint' (aka 'struct CGPoint') e 'CGPoint')" – ndomin

+3

Già. Non possibile in C. Potresti riuscire a scrivere qualcosa in C++ con l'overloading dell'operatore, ma in generale no. – ipmcc

+0

@ipmcc ok, grazie – ndomin

risposta

8

Ed ecco il "qualcosa" che @ipmcc suggerito: C++ overloading degli operatori. Attenzione: non farlo a casa.

CGPoint operator+(const CGPoint &p1, const CGPoint &p2) 
{ 
    CGPoint sum = { p1.x + p2.x, p1.y + p2.y }; 
    return sum; 
} 
+0

È possibile sovraccaricare gli operatori su 'struct's ?! Devo davvero lavorare sul mio C++. –

+1

@JoshCaswell Bene, 'struct's sono in realtà le stesse di' class'es, tranne per il fatto che la visibilità dei membri è impostata su 'public' per impostazione predefinita. –

+0

Questo è abbastanza qualcosa. –

2

Non è possibile utilizzare gli operatori aritmetici su struct s, sfortunatamente. Il meglio che puoi fare è una funzione:

CGPoint NDCGPointMinusPoint(CGPoint p1, CGPoint p2) 
{ 
    return (CGPoint){p1.x-p2.x, p1.y-p2.y}; 
} 
+0

Bello e semplice, grazie! – turingtested