Frage

Gegeben:

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

namespace Two {
  // ... see later
}

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

gibt es einen Unterschied zwischen den beiden folgenden Varianten:

a)

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

und b)

namespace Two {
  using One::foo;
};

EDIT: Es ist ziemlich klar, dass (a) dupliziert den Code, der nie eine gute Idee sein sollte. Die Frage ist, mehr über die Überladungsauflösung usw. ... was, wenn es andere foos oder munches in möglicherweise anderen Namespaces?

War es hilfreich?

Lösung

Mit einem, sie sind tatsächlich verschiedene Funktionen, aber mit b sind die beiden Funktionen identisch:

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

Dies würde selten Rolle; eine größere Sorge ist die Logik duplizieren.

Andere Tipps

Wie für die Nutzung sie gleichwertig sind. Wie für den Code, sind Duplizieren im Fall a) Sie die Funktion foo() Code. Das heißt, beide Versionen die foo() Funktion innerhalb Two zur Verfügung stellen, aber der a) Fall generiert den Code für foo zweimal, weil der Compiler keinen Hinweis hat entdecken sie die gleiche Funktion ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top