Duplicar posible:
Where should non-member operator overloads be placed?La sobrecarga de operadores y espacios de nombres
durante la navegación en SO, a menudo encuentro pregunta o respuesta que implica la sobrecarga/definen un std::ostream& operator<<(std::ostream& os, const Foo& foo)
o una Foo operator+(const Foo& l, const Foo& r)
.
Si bien sé cómo y cuándo (no) escribir estos operadores, estoy confundido acerca de la cosa namespace
.
Si tengo la clase siguiente:
namespace bar
{
class Foo {};
}
En lo que namespace
debo escribir las diferentes definiciones de operador?
// Should it be this
namespace bar
{
std::ostream& operator<<(std::ostream& os, const Foo& foo);
}
// Or this ?
namespace std
{
ostream& operator<<(ostream& os, const bar::Foo& foo);
}
// Or this ?
std::ostream& operator<<(std::ostream& os, const bar::Foo& foo);
La misma pregunta se aplica al operator+
. Entonces, ¿cuál es la buena práctica aquí y ¿por qué?
duplicados de [¿Dónde debe se colocan sobrecargas del operador no miembro?] (http: // stackoverflow.com/questions/3623631/overloading-operator) –
@James McNellis: De hecho, no pude encontrar una pregunta similar. Gracias;) – ereOn
Tenga en cuenta que el segundo es realmente ilegal, solo puede agregar especializaciones al espacio de nombres 'std'. – GManNickG