2017-05-10 104 views
-1

我發現我不能直接比較兩個SDL_point S:比較兩個SDL_point?

SDL_Point a = {1, 2}; 
SDL_Point b = {1, 2}; 

if (a == b) std::cout << "a = b\n"; // Doesn't compile. 
if (a.x == b.x && a.y == b.y) // I have to do this instead. 
    std::cout << "a = b\n"; 

我想超載operator==,但由於SDL_Point部分SDL,我不知道怎麼樣,因爲我可能要在我的遊戲的許多不同類中使用重載操作符。

這樣做的正常方法是什麼?

+1

比較運算符重載可以是[自由函數](http://en.cppreference.com/w/cpp/language/operator_comparison),而不僅僅是成員函數。 – genpfault

回答

2

只要有一個實用程序或sdl_utility頭定義運營商在線:

inline bool operator==(SDL_Point const &a, SDL_Point const &b) 
{ 
    return a.x == b.x && a.y == b.y; 
} 

inline bool operator!=(SDL_Point const &a, SDL_Point const &b) 
{ 
    return !(a == b); 
} 

你將不得不包括希望使用操作員的源文件這個頭。

+0

不錯,我在想那樣的事情,但我不確定這是否是一種好的做法。謝謝! :) – JoePerkins

+1

@JoePerkins我會說,只要你正在建立一個二進制文件,而不是一個庫就沒問題。如果你正在創建一個庫,那麼你可能不希望將額外的操作符投入到你的頭文件中,因爲這樣它們就成爲了你的庫接口的一部分,並且如果有人想將你的庫與另一個庫一起使用, ==''SDL_Point',他們會有一段糟糕的時間。您可以通過將運算符保留在庫的命名空間中來緩解這種情況。 – cdhowie

+0

@JoePerkins(除非你的庫的具體目標是爲SDL提供一個C++層,那就是)。 – cdhowie