Pregunta

Teniendo en cuenta:

namespace One {
  void foo(int x) {
    munch(x + 1);
  }
};

namespace Two {
  // ... see later
}

...
void somewhere() {
  using namespace Two;
  foo(42);
  ...

¿hay alguna diferencia entre las dos variantes siguientes:

a)

namespace Two {
  void foo(int x) {
    munch(x + 1);
  }
};

y b)

namespace Two {
  using One::foo;
};

EDIT: Es bastante claro que (a) duplica el código que nunca debe ser una idea buena. La cuestión es más acerca de la resolución de sobrecarga etc ... ¿y si hay otros foos o munches posiblemente en otros espacios de nombres?

¿Fue útil?

Solución

Con una, en realidad son funciones diferentes, pero con b, las dos funciones son idénticas:

assert(&One::foo == &Two::foo);

Esto rara vez tendría importancia; una preocupación más grande está duplicando la lógica.

Otros consejos

En cuanto al uso son equivalentes. En cuanto a código, en el caso a) que está duplicando el código de función foo(). Es decir, las dos versiones pondrá a disposición la función foo() dentro Two, pero el) caso de que una genera el código para foo dos veces, ya que el compilador no tiene ninguna pista en el descubrimiento de que es la misma función.

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