Pregunta

Cuando se crea una biblioteca en un espacio de nombres en particular, a menudo es conveniente proporcionar operadores sobrecargados para las clases en ese espacio de nombres. Parece (al menos con g ++) que los operadores sobrecargados pueden implementarse en el espacio de nombres de la biblioteca:

namespace Lib {
class A {
};

A operator+(const A&, const A&);
} // namespace Lib

o el espacio de nombres global

namespace Lib {
class A {
};
} // namespace Lib

Lib::A operator+(const Lib::A&, const Lib::A&);

Desde mi prueba, ambos parecen funcionar bien. ¿Hay alguna diferencia práctica entre estas dos opciones? ¿Alguno de los enfoques es mejor?

¿Fue útil?

Solución

Deberías definirlos en el espacio de nombres de la biblioteca. El compilador los encontrará de todos modos mediante una búsqueda dependiente de argumentos.

No es necesario contaminar el espacio de nombres global.

Otros consejos

Ponerlo en el espacio de nombres de la biblioteca funciona debido a búsqueda de Koenig .

Debería definirlo en el espacio de nombres, porque la sintaxis será menos detallada y no saturará el espacio de nombres global.

En realidad, si define sus sobrecargas en su definición de clase, esto se convierte en una pregunta discutible:

namespace Lib {

class A {
public:
    A operator+(const A&);
};

} // namespace Lib
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top