Desarrollo de videojuegos 3: técnicas avanzadas (2ª edición)

Page 135

2.5. C++11: Novedades del nuevo estándar

[117]

10 return Vector3D(x_ + v.x_, 11 y_ + v.y_, 12 z_ + v.z_ ); 13 } 14 15 private: 16 float x_; 17 float y_; 18 float z_; 19 20 friend Vector3D operator"" _vx(long double x); 21 friend Vector3D operator"" _vy(long double y); 22 friend Vector3D operator"" _vz(long double z); 23 };

Se podrían definir los siguientes literales de usuario, por ejemplo para construir vectores ortogonales. 1 2 3 4 5 6 7 8 9 10 11

Vector3D operator"" _vx(long double x) { return Vector3D(x, 0, 0); } Vector3D operator"" _vy(long double y) { return Vector3D(0, y, 0); } Vector3D operator"" _vz(long double z) { return Vector3D(0, 0, z); }

Como se definió la suma, se podría crear un vector con la misma. 1

auto v = 1.0_vx + 3.0_vy + 8.1_vz;

Para utilizar los sufijos con los literales de cadenas, se muestra el siguiente ejemplo, que representa un jugador, con un nombre. 1 2 3 4 5 6 7 8 9 10 11 12

class Player { public: Player(string name): name_(name) {} private: string name_; }; Player operator"" _player(const char* name, size_t nChars) { return Player(name); };

Se podrá entonces crear un jugador como sigue. 1

auto p = "bRue"_player;


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.