J’aime bien l’idée, mais si l’on garde l’idée de ne pas dupliquer les données, on arrive vite à une situation proche de :
1
2
3
4
5
6
7
8
9
10
11
12
13 | struct Rect final : private SDL_Rect {
Rect(int x, int y, Width w, Height h) : SDL_Rect{x, y, w.get(), h.get()} {}
// ^ Si c'est juste pour l'initialisation, on peut aussi passer par unsigned + static_cast
// ...
using SDL_Rect::x;
using SDL_Rect::y;
using SDL_Rect::w;
using SDL_Rect::h;
operator SDL_Rect() const noexcept;
};
// ...
Rect rect{0, 0, 10, 10}; // Ok, les valeurs sont valides
rect.w = -10; // C'est bête, mais valide
|
On laisse donc le soin à l’utilisateur de ne pas faire n’importe quoi ?
EDIT : Il semblerait que le problème se règle de lui-même : error: cannot cast 'X' to its private base class 'Y'
. Je préfère garder la possibilité de convertir sdl::Rect
en SDl_Rect
, sdl::Point
en SDL_Point
, etc… (tant qu’il n’y a pas de pointeur en variable membre)
Donc je pense virer l’héritage privé, et retour à la case départ.