2013-08-03 11 views
5

w Objective-C Zaczynam pracować z CGPoints a kiedy trzeba dodać dwa z nich tak jak ja to robię to w ten sposób:arytmetyczne na dwóch CGPoints z + lub - operatorów

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

Chciałbym móc:

CGPoint p3 = p2 - p1; 

Czy to możliwe?

+0

Tak, przynajmniej w Xcode dla iOS pojawia się błąd "Nieprawidłowy argumentów do binarnego wypowiedzi ('CGPoint' (aka 'struct CGPoint') i 'CGPoint')" – ndomin

+3

Tak. Niemożliwe w C. Możliwe, że będziesz w stanie wymyślać coś w C++ z przeciążeniem operatora, ale generalnie nie. – ipmcc

+0

@ipmcc ok, dziękuję – ndomin

Odpowiedz

8

A oto „coś”, co sugeruje @ipmcc: C++ operator przeciążenie. Ostrzeżenie: nie rób tego w domu.

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

Możesz przeciążać operatory na 'struct's ?! Naprawdę muszę pracować nad moim C++. –

+1

@JoshCaswell Cóż, 'struct's są naprawdę takie same, jak' class'es, z tym wyjątkiem, że mają domyślnie ustawioną widoczność członków na 'public'. –

+0

To całkiem coś. –

2

Nie można używać niestety operatorów arytmetycznych na struct s. Najlepsze co możesz zrobić, to funkcja:

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

Ładne i proste, dzięki! – turingtested

Powiązane problemy