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;